Regex 行中的正则表达式异常

Regex 行中的正则表达式异常,regex,exception,Regex,Exception,假设我有一个正则表达式: "|<pizza><onion>(.*)</onion><tomato>(.*)</tomato></pizza>|" “|(.*)(.*)|” 这一行匹配几行并返回它(php:preg\u match\u all)。现在我想为洋葱中的(.*)添加一个异常:洋葱可能没有值“default”。如何排除此选项?请尝试: ~<pizza><onion>((?:(?!</o

假设我有一个正则表达式:

"|<pizza><onion>(.*)</onion><tomato>(.*)</tomato></pizza>|"
“|(.*)(.*)|”
这一行匹配几行并返回它(php:preg\u match\u all)。现在我想为洋葱中的(.*)添加一个异常:洋葱可能没有值“default”。如何排除此选项?

请尝试:

~<pizza><onion>((?:(?!</onion>|default).)*)</onion><tomato>((?:(?!</tomato>).)*)</tomato></pizza>~s
其中,
~
是分隔符


如果您的源代码有注释,
,或者可以有任意数量的嵌套标记,我强烈建议您改用某种(X)HTML ish解析器。

您使用正则表达式解析XML吗?如果是,请不要。请始终使用某种XML解析器。“|(...|!默认值)(.*)|”不起作用?@Kevin,尝试时会发生什么?
~
<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)