我想写一个正则表达式来匹配需要两个条件的单词。
位于XML action 标记内。我为此写了一个正则表达式:
([^<>])*(?=<\/action>)
匹配括号前的单词。像这样:
((\w+)(?=\s?\())
将两个表达式组合为一个不起作用。有什么想法吗?
([^<>])((\w+)(?=\s?\())(?=<\/action>)
使用以下文本,正则表达式应匹配所有出现的单词 add :
<action>add();</action>
<action name="foo">add();</action>
<action>
add();
</action>
答案 0 :(得分:0)
这是您要查找的正则表达式,它需要满足您的两个正则表达式条件,
(?s)(?:<action[^>]*>\s*\K)\w+(?=\s?\(\).*<\/action>)
此正则表达式将同时满足您的两个条件,
<action>
标记之间说明:
(?s)
->需要启用与新行匹配的点,因为我看到您的标签可以分布在多行中。(?:<action[^>]*>\s*)
->这与action标签匹配,其中action标签可以选择包括任何种类的属性。 \ s *是要吃掉我们不希望与单词匹配的任何空格。\K
->重置所有匹配项,因此根据OP的帖子仅匹配单词。为什么要这样做,因为否定组后面的表情不允许量词,并且同时允许正则表达式与标记内的任何可变长度输入匹配,从而使正则表达式变得健壮。\w+
->捕获想要的单词(?=\s?\(\).*<\/action>
->正向查找,以确保其后跟()
,后跟零个或多个任何字符,后跟标记。此外,您希望此正则表达式([^<>])*(?=<\/action>)
确保与<action>
标签之间的单词匹配的方式,此正则表达式还不够,因为它也将与此匹配,
add</action>
未包含在<action>
标记中。
希望这会有所帮助,让我知道您是否还有任何疑问。