2012-02-25 68 views
1

我知道这个问题之前已经被问过,因为我只是在阅读这些答案,但仍然不能得到这个工作(正确)。preg_replace没有正确匹配

林很新的正则表达式,我试图做一些事情,听起来很简单:

该字符串应该是: http://www.something.com/section/filter/colour/red-#998682/size/small/

我想这样做是preg_replace函数删除 - #? ?????所以URL看起来像: http://www.something.com/section/filter/colour/red/size/small/

所以我尝试:

$string = $theURL; 
$pattern = '/-\#(.*)\//i'; 
$replacement = '/'; 
$newURL = preg_replace($pattern, $replacement, $string); 

那种作品,但它不停止。如果我有什么后面的 - #??????它也消除了这一点。但我认为有/最终会阻止它这样做?

希望有人能帮助和阅读

感谢

回答

1

PCRE是默认的贪婪,这意味着.*将大块匹配越好。让它ungreedy通过添加U标志(整个图形),或使用.*?(仅针对该通配符部分):

/-\#(.*)\//iU 

/-\#(.*?)\//i 
+0

哇谢谢大家的快速答复。这工作完美。需要等待几分钟,直到它让我选择一个答案。再次感谢:) – fl3x7 2012-02-25 21:55:46

1

您需要使用非贪婪量词。

$pattern = '/-\#(.*?)\//i'; 

你的正则表达式是贪婪的,这意味着(.*)\/寻找最后一个斜线,而不是第一个。

demo

1

(.*)图案是gready,这意味着它会匹配尽可能多的字符可能的。要匹配所有的第一斜线使用(.*?)

$pattern = '/-\#(.*?)\//i';