替换两个字母之间的连字符,但不能在两个数字之间替换(PHP)

时间:2014-11-19 01:35:17

标签: php regex string hyphen

我知道你可以这样做来取代任何“连字符”符号:

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

但这也取代了任何减号(我想保留)。

使用正则表达式仅在两个字母之间得到连字符:

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

替换连字符,但也替换了每一个字母,并带有空格。

是否有一种优雅的方法可以在两个字母之间只使用连字符,而不是在两个数字之间?

1 个答案:

答案 0 :(得分:2)

您可以使用环顾assertions

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

(?<=[a-z])断言破折号前面有一个字母; (?=[a-z])在破折号后面做同样的事情。

断言不是记忆捕获,因此在进行替换时它们不会受到影响。