正则表达式preg_match循环不同的术语

时间:2014-01-08 10:41:59

标签: php regex

我想通过字符串匹配不同的术语,但无法使其正常工作。我想在{tab ...} en {media ...}上进行匹配,并以不同的方式处理它们。

如果我只匹配一个,它可以工作:

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

但是当我添加媒体标签时,它不再起作用了。这就是我现在使用的:

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

2 个答案:

答案 0 :(得分:1)

你似乎混淆了正则表达式分隔符和使用parens的方式。试试这个:

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

请注意,分隔符保持原样。你甚至可以尝试这样的事情:

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

我不确定handle them differently你的意思,但大部分时间,这意味着你应该把它们放在单独的正则表达式中。

答案 1 :(得分:1)

这就够了:

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

不需要额外的斜线。如果你的字符串中有更多的后果,你也应该使用preg_match_all

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