我正在尝试删除分隔单词的正斜杠,而不是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);
感谢任何帮助!
答案 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]
。
答案 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>