行中的正则表达式异常

时间:2011-04-27 12:23:12

标签: regex exception

说我有一个正则表达式:

"|<pizza><onion>(.*)</onion><tomato>(.*)</tomato></pizza>|"

这个匹配几行并返回它(php:preg_match_all)。现在我想在洋葱中添加(。*)异常:洋葱可能没有值“默认”。我该如何排除这个?

1 个答案:

答案 0 :(得分:1)

尝试:

~<pizza><onion>((?:(?!</onion>|default).)*)</onion><tomato>((?:(?!</tomato>).)*)</tomato></pizza>~s

或等效的,但启用了x标志:

~
<pizza>
<onion>
(
  (?:(?!</onion>|default).)* # anything not containing `</onion>` and `default` 
)
</onion>
<tomato>
(
  (?:(?!</tomato>).)*        # anything not containing `</tomato>` 
)
</tomato>
</pizza>
~sx                          # enable DOT-ALL (s), and COMMENTS (x)

其中~是分隔符。

如果你的来源有评论,<!-- possible tags -->,或者可以有任意数量的嵌套标签,我强烈建议使用某种(X)HTML-ish解析器。