正则表达式从PHP中删除单词中的正斜杠而不是数字

时间:2015-07-14 07:57:27

标签: php regex

我正在尝试删除分隔单词的正斜杠,而不是PHP中的数字。

示例字符串:

"sf/berkeley to paso/slo/sb on 9/25"

我希望我的结果是:

"sf berkeley to paso slo sb on 9/25"

使用"/([a-z]+)\\/(?=[a-z]+)/"我能够: " sf berkeley to paso / slo / sb on 9/25"

我的PHP代码:

$re = "/([a-z]+)\\/(?=[a-z]+)/";      
$subst = "$1 ";

$result = preg_replace($re, $subst, $str, 1);

感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

您需要使用断言。

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

更新

您的代码有效,您只需删除最后一个1参数,这意味着只需更换一次。

$re = "/([a-z]+)\\/(?=[a-z]+)/";      
$subst = "$1 ";

$result = preg_replace($re, $subst, $str);

此外,您无需在+之后添加[a-z]

DEMO

答案 1 :(得分:1)

您可以使用

$re = '/^\/|\/$|(?<!\d)(\/)(?!\d)/'; 
$result = preg_replace_callback($re, function($m) {
    if (count($m[1]) > 0) {
       return " ";
    }
    else {
       return "";
    }
}, $str);
echo $result. "\n";

请参阅IDEONE demo

正则表达式 - /^\/|\/$|(?<!\d)(\/)(?!\d)/ - 在字符串的开头或末尾匹配/,并用空的strig替换它们,并且还匹配(并且只捕获以检查字符串我们找到/的位置/只有在它之前没有数字((?<!\d))及其之后((?!\d))。{/ p>