说我有一个正则表达式:
"|<pizza><onion>(.*)</onion><tomato>(.*)</tomato></pizza>|"
这个匹配几行并返回它(php:preg_match_all)。现在我想在洋葱中添加(。*)异常:洋葱可能没有值“默认”。我该如何排除这个?
答案 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解析器。