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

替换两个字母之间的连字符,但不替换两个数字之间的连字符(PHP),php,regex,string,hyphen,Php,Regex,String,Hyphen,我知道您可以这样做来替换任何“连字符”符号: 但这也取代了任何减号(我想保留) 使用正则表达式仅获取两个字母之间的连字符: $tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp); 用空格替换连字符及其两侧的字母 有没有一种优雅的方法可以让两个字母之间只有一个连字符,而不是两个数字之间的连字符 您可以使用环顾四周: $tmp=preg_replace('/(?preg_replace(“/([a-z])-([a-z])/i“,“$1$2”,$

我知道您可以这样做来替换任何“连字符”符号:

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

使用正则表达式仅获取两个字母之间的连字符:

$tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp);
用空格替换连字符及其两侧的字母

有没有一种优雅的方法可以让两个字母之间只有一个连字符,而不是两个数字之间的连字符

您可以使用环顾四周:


$tmp=preg_replace('/(?
preg_replace(“/([a-z])-([a-z])/i“,“$1$2”,$tmp);
+1链接到手册和说明。在我的例子中,我用逗号替换了连字符。效果非常好!
$tmp = preg_replace("/[a-zA-Z]-[a-zA-Z]/", " ", $tmp);
$tmp = preg_replace('/(?<=[a-z])-(?=[a-z])/i', ' ', $tmp);