正则表达式背后的单词位置

时间:2014-05-13 12:12:36

标签: php regex

事情不是很好。

到目前为止我的正则表达式:

(?<!not\s)(?<!n't\s)(nice|friendly|excelent|comfortable|easy access|good|clean|beautiful)

如果句子不包含单词,我想只匹配单词(很好,友好......在这句话中...):&#34; not&#34;或&#34; n&#t;#34; (a.k.a wasn&#t; t,isn&#t; t)。 A.k.a积极的句子。

但这个正则表达式仅适用于以下句子:

The thing was very not nice.

如何编写lookbehind以检查单词&#34; not&#34;或&#34; n&#t;#34;在我的形容词之前不是处于什么位置?

2 个答案:

答案 0 :(得分:3)

您可以使用否定前瞻功能来检查字符串中的任何位置是否有notn't,而\K则会丢弃您不想要的部分:

^(?!.*(?:not|n't)).*\K(nice|friendly|excellent|comfortable|easy access|good|clean|beautiful)

(?!...)如果内部匹配,则会失败,(?:not|n't)是非捕获组。

请记住,这是一个非常简单的检查。它与nice中的This is nice but not pretty不匹配。如果您想要更深入地理解语法,那么您必须深入挖掘。

答案 1 :(得分:0)

Lookbehinds必须是固定长度的。

划分任务可能更容易。首先检查句子是否包含&#34; nice&#34;,&#34; friendly&#34;等,然后在单独的条件中,检查它是否包含否定。

这样可以更容易地检测双阴性:p