$url = "example-com--folder";
$searchArray = array('/-/','/--/');
$replaceArray = array('.','/');
$url = preg_replace($searchArray, $replaceArray, $url);
我想要的输出是example.com/folder
,但我现在得到的只是example.com..folder
我知道这是因为我没有正确的正则表达式模式,但那种模式会是什么?
答案 0 :(得分:2)
更改'/--/'
和'/-/'
模式的顺序,以便先检查'/--/'
,否则'/-/'
将胜过'/--/'
。不要在对preg_replace
的调用中插入数组。
$url = "example-com--folder";
$searchArray = array('/--/', '/-/');
$replaceArray = array('/', '.');
$url = preg_replace($searchArray, $replaceArray, $url);
备选方案:
preg_replace
。这并不像你想象的那样令人讨厌,因为preg_replace
循环遍历数组并依次处理每个RE。使用已评估的替换
$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);
答案 1 :(得分:0)
这是PHP,对吧?
您需要一个量词来指定您在第二个模式中只需要两个连字符。尝试:
$searchArray = array('/-/','/-{2}/');
大括号说'要求 n 前面的模式'
答案 2 :(得分:0)
看看是否有效:
$url = "example-com--folder"; $searchArray = array('([^-])-([^-])','--'); $replaceArray = array('$1.$2','/'); $url = preg_replace("$searchArray", "$replaceArray", $url);
这说的是“匹配任何 - 在之前或之后没有破折号并用a替换它”。和“匹配双 - 与/”。很明显,你可以通过在from和back添加([^ - ])来扩展它以将第二个匹配限制为2个破折号。事实上,“-----”将变成“//”,你可能不想要它。