2014-01-08 55 views
0

我想通過一個字符串並匹配不同的術語,但不能得到它的工作。我想在{tab ...} en {media ...}上匹配,並以不同的方式處理它們。正則表達式preg_match循環通過不同的術語

如果我只匹配一個,它的工作原理:

while ($do = preg_match("/{tab(.*?)}/", $description, $match, PREG_OFFSET_CAPTURE, $offset)){ 

但是當我添加介質標籤,它不工作了。這是我現在使用的:

while ($do = preg_match("(/{tab(.*?)}/|/{media(.*?)}/)", $description, $match, PREG_OFFSET_CAPTURE, $offset)){ 
... 
} 

回答

1

您似乎混淆正則表達式分隔符和使用parens的方式。試試這個:

"/{tab(.*?)}|{media(.*?)}/" 
^      ^

請注意,分隔符仍然保留在原來的位置。你甚至可以嘗試這樣的事:

"/{(?:tab|media)(.*?)}/" 

我不知道你所說的handle them differently的意思,但大部分的時間,這意味着你應該讓他們在不同的正則表達式。

1

這是不夠的:

{tab(.*?)}|{media(.*?)} 

無需額外的斜槓。如果你的字符串中有更多的後果,你也應該使用preg_match_all

preg_match_all("/{tab(.*?)}|{media(.*?)}/", $description, $match, PREG_OFFSET_CAPTURE, $offset)) 
+0

感謝您的幫助! – Bert