regex — заменить дефис между двумя буквами, но не между двумя числами (PHP)

Я знаю, что вы можете сделать это, чтобы заменить любой символ «дефис»:

$tmp = str_replace("-", " ", $tmp);

но это также заменяет любые знаки минус тоже (что я хотел бы сохранить).

Использование регулярных выражений, чтобы получить дефис только между двумя буквами:

$tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp);

заменяет дефис, а также букву на каждой его стороне пробелом.

Есть ли элегантный способ получить дефис между двумя буквами, а не между двумя числами?

2

Решение

Вы можете использовать осмотр утверждения:

$tmp = preg_replace('/(?<=[a-z])-(?=[a-z])/i', ' ', $tmp);

(?<=[a-z]) утверждает наличие буквы, предшествующей тире; (?=[a-z]) делает то же самое после черты.

Утверждения не являются захватом памяти, поэтому они не затрагиваются при выполнении замены.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]