题
$url = "example-com--folder";
$searchArray = array('/-/','/--/');
$replaceArray = array('.','/');
$url = preg_replace($searchArray, $replaceArray, $url);
输出我要是 example.com/folder
但我现在得到的是 example.com..folder
我知道这是因为我没有适当的regex模式,但是什么图案是什么?
解决方案
改变了的 '/--/'
和 '/-/'
模式,以便 '/--/'
首先检查,否则 '/-/'
将特朗普 '/--/'
.不要插入这些阵列在呼叫 preg_replace
.
$url = "example-com--folder";
$searchArray = array('/--/', '/-/');
$replaceArray = array('/', '.');
$url = preg_replace($searchArray, $replaceArray, $url);
备选方案:
- 使用多个电话来
preg_replace
在命令你希望评估的REs。这是不是令人讨厌的你可能会认为是因为preg_replace
循环多数组处理的每一个重。 使用评估的更换
$url = "www-example-com--folder"; $replacements = array('-' => '.', '--' => '/'); $url = preg_replace('/(--?)/e', '$replacements["$1"]', $url);
使用 预期,并回顾
$url = "www-example-com--folder"; $searchArray = array('/(?<!-)-(?!-)/', '/--/'); $replaceArray = array('.', '/'); $url = preg_replace($searchArray, $replaceArray, $url);
其他提示
这是PHP,对吧?
您需要一个量词来指定您在第二个模式中只需要两个连字符。尝试:
$searchArray = array('/-/','/-{2}/');
大括号说'要求 n 前面的模式'
这是良好的参考资料。
看看是否有效:
$url = "example-com--folder"; $searchArray = array('([^-])-([^-])','--'); $replaceArray = array('$1.$2','/'); $url = preg_replace("$searchArray", "$replaceArray", $url);
这说的是“匹配任何 - 在之前或之后没有破折号并用a替换它”。和“匹配双 - 与/”。很明显,你可以通过在from和back添加([^ - ])来扩展它以将第二个匹配限制为2个破折号。实际上,“-----”将成为“//”,您可能不需要。
不隶属于 StackOverflow