Regex 多次匹配整个多行模式,但不匹配是否包含字符串
假设我有这个文本(我意识到使用正则表达式解析HTML不是正确的解决方案…) 你好 蜘蛛 你好 奶酪 你好 香蕉 我想分别匹配Regex 多次匹配整个多行模式,但不匹配是否包含字符串,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,假设我有这个文本(我意识到使用正则表达式解析HTML不是正确的解决方案…) 你好 蜘蛛 你好 奶酪 你好 香蕉 我想分别匹配和中的文本(这是一个精心设计的示例) 我可以通过以下方式实现这一目标: /(.*)。(.*)。/gsmi 但是,如果span中的文本是CHEESE,我不想匹配。 我试着用这样的消极前瞻: /(*?).*((?!奶酪)。*?).*/gsmi 但是,现在匹配错误的东西,因为模式匹配到HELLO2和BANANA我想要的HELLO3和BANANA 我意识到这是因为我使用的是*?,
和
中的文本(这是一个精心设计的示例)
我可以通过以下方式实现这一目标:
/(.*)。(.*)。/gsmi
但是,如果span中的文本是CHEESE
,我不想匹配。
我试着用这样的消极前瞻:
/(*?).*((?!奶酪)。*?).*/gsmi
但是,现在匹配错误的东西,因为模式匹配到HELLO2
和BANANA
我想要的HELLO3
和BANANA
我意识到这是因为我使用的是*?
,但这是现实生活中的解决方案所必需的
示例如下:
我如何匹配,一个完整的模式,但仍然跨越多条线?您可以通过两个步骤实现您想要的。首先,提取满足以下条件(即没有奶酪)的
div
元素():
我的一位同事给了我这个答案,这正是我想要的:
正则表达式:
(?:(?:(\w*))\s)(?!CHEESE)(?:(\w*))
您的示例中没有标记。@ReymartBetana谢谢-I重构了示例,而在编写时,是否仍然可以一步完成?也许是使用反向引用?据我所知不是。
<div><p>HELLO1</p>
<span>SPIDER</span></div>
<div><p>HELLO2</p>
<span>CHEESE</span></div>
<div><p>HELLO3</p>
<span>BANANA</span></div>
<div>(?:(?!CHEESE).)*?<\/div>
(?<=<p>)(.*?)(?=<\/p>)(?:.*?)(?<=<span>)(.*?)(?=<\/span>)