Regex 多次匹配整个多行模式,但不匹配是否包含字符串

Regex 多次匹配整个多行模式,但不匹配是否包含字符串,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,假设我有这个文本(我意识到使用正则表达式解析HTML不是正确的解决方案…) 你好 蜘蛛 你好 奶酪 你好 香蕉 我想分别匹配和中的文本(这是一个精心设计的示例) 我可以通过以下方式实现这一目标: /(.*)。(.*)。/gsmi 但是,如果span中的文本是CHEESE,我不想匹配。 我试着用这样的消极前瞻: /(*?).*((?!奶酪)。*?).*/gsmi 但是,现在匹配错误的东西,因为模式匹配到HELLO2和BANANA我想要的HELLO3和BANANA 我意识到这是因为我使用的是*?,

假设我有这个文本(我意识到使用正则表达式解析HTML不是正确的解决方案…)

你好

蜘蛛 你好

奶酪 你好

香蕉 我想分别匹配
中的文本(这是一个精心设计的示例)

我可以通过以下方式实现这一目标:

/(.*)。(.*)。/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>)