我知道之前已经问过这个问题,因为我刚刚阅读了这些答案,但仍然无法正常工作(正确)。
我是正则表达式的新手,我正在尝试做一些听起来非常简单的事情:
字符串将是: http://www.something.com/section/filter/colour/red-#998682/size/small/
我想做的是preg_replace删除 - #??????所以网址看起来像: http://www.something.com/section/filter/colour/red/size/small/
所以我试过了:
$string = $theURL;
$pattern = '/-\#(.*)\//i';
$replacement = '/';
$newURL = preg_replace($pattern, $replacement, $string);
这种作品但它并没有停止。如果我之后有什么 - #??????它也删除了它。但我觉得有/最终会阻止它这样做吗?
希望有人可以提供帮助并感谢您的阅读
答案 0 :(得分:1)
默认情况下,PCRE是贪婪的,这意味着.*
将匹配尽可能大的块。通过添加U
标志(针对整个模式)或使用.*?
(仅针对该通配符部分)来使其不合适:
/-\#(.*)\//iU
或
/-\#(.*?)\//i
答案 1 :(得分:1)
答案 2 :(得分:1)
(.*)
模式是gready,这意味着它将匹配尽可能多的字符。要将所有内容与第一个斜杠相匹配,请使用(.*?)
:
$pattern = '/-\#(.*?)\//i';