如何匹配不包含单词的一行
这个问题在这里已经有了答案:
这应该工作:
/^((?!PART).)*$/
如果你只想从行首开始排除它(我知道你没有,但只是FYI),你可以使用这个:
/^(?!PART)/
编辑(通过请求):为什么这个模式有效
(?!...)
语法是一种负面预测,我一直很难解释。 基本上,这意味着“此后的任何内容都不能与正则表达式/PART/
匹配。” 我已经链接的网站比我更好地解释了这一点,但我会尽力打破这一点:
^ #Start matching from the beginning of the string.
(?!PART) #This position must not be followed by the string "PART".
. #Matches any character except line breaks (it will include those in single-line mode).
$ #Match all the way until the end of the string.
((?!xxx).)*
成语可能最难理解。 正如我们所看到的, (?!PART)
先看字符串,并说接下来的任何内容都不能匹配子模式/PART/
。 所以我们在做什么((?!xxx).)*
是逐字逐字地处理字符串,并将规则应用于所有字符。 每个角色都可以是任何东西,但是如果你把那个角色和其后的几个角色拿走,你最好不要说PART。
^
和$
锚在那里要求规则应用于整个字符串,从头到尾。 如果没有这些锚点,那么没有以PART开头的任何一段弦乐都将是一场比赛。 即使PART本身也会有匹配的,因为(例如)字母A没有紧跟在确切的字符串PART之后。
既然我们有^
和$
,如果PART在字符串中的任何位置,其中一个字符就会匹配(?=PART).
整体比赛将失败。 希望这已经足够清楚,有帮助。