我知道你可以这样做来取代任何“连字符”符号:
$tmp = str_replace("-", " ", $tmp);
但这也取代了任何减号(我想保留)。
使用正则表达式仅在两个字母之间得到连字符:
$tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp);
替换连字符,但也替换了每一个字母,并带有空格。
是否有一种优雅的方法可以在两个字母之间只使用连字符,而不是在两个数字之间?
答案 0 :(得分:2)
您可以使用环顾assertions:
$tmp = preg_replace('/(?<=[a-z])-(?=[a-z])/i', ' ', $tmp);
(?<=[a-z])
断言破折号前面有一个字母; (?=[a-z])
在破折号后面做同样的事情。
断言不是记忆捕获,因此在进行替换时它们不会受到影响。