我想通过字符串匹配不同的术语,但无法使其正常工作。我想在{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)){
...
}
答案 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))