正则表达式 - 如何在不包含单词时选择所有内容

时间:2018-02-07 18:20:02

标签: regex

说我有这个文字

  

我需要想一些在这里写的东西。   我是学院的校友。   蓝猫是蓝色的,红猫是红色的。

如果文本中不存在单词“student”(忽略大小写),我希望能够选择所有内容。因此,我需要超越第一线的东西。我最初有类似

的东西
/(?:[^student]).*/ 

但它无法正常工作。我不确定我正在使用的正则表达式的“味道”,但它是在PHP和Drupal站点的后端。

谢谢!

1 个答案:

答案 0 :(得分:0)

<强>问题

正如ctwheels评论所建议的那样,你写的(?:[^student]).*的正则表达式没有按照你的想法做到。让我们打破你解释问题的尝试:

(?: )&lt; ---此部分是非捕获组

[^student]&lt; ---此部分匹配列表中不存在的单个字符

.*&lt; ---匹配任何字符(行终止符除外)

即,您的括号表达式与[^tneduts][^neduts]甚至[^denstu]相同。它不会找一个字!

<强>解决方案

您想要做的是使用否定前瞻。像这样^(?!.*student).*$。让我们分解吧。

^&lt; ---字符串开头的位置

(?!.*student)&lt; ---查找学生后面的任何内容,如果找到则不匹配

.*&lt; ---除非负前瞻有效,否则将所有内容都排除在外。

$&lt; ---位于字符串末尾的位置