Я знаю, что вы можете сделать это, чтобы заменить любой символ «дефис»:
$tmp = str_replace("-", " ", $tmp);
но это также заменяет любые знаки минус тоже (что я хотел бы сохранить).
Использование регулярных выражений, чтобы получить дефис только между двумя буквами:
$tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp);
заменяет дефис, а также букву на каждой его стороне пробелом.
Есть ли элегантный способ получить дефис между двумя буквами, а не между двумя числами?
Вы можете использовать осмотр утверждения:
$tmp = preg_replace('/(?<=[a-z])-(?=[a-z])/i', ' ', $tmp);
(?<=[a-z])
утверждает наличие буквы, предшествующей тире; (?=[a-z])
делает то же самое после черты.
Утверждения не являются захватом памяти, поэтому они не затрагиваются при выполнении замены.
Других решений пока нет …