regex - 我怎样才能用正则表达式找到除了某些短语之外的所有内容?

标签 regex regex-negation

好的,所以我有一个短语“foo bar”,我想找到除“foo bar”之外的所有内容。
这是我的文字。

ipsum dolor foo bar Lorem ipsum dolor sit amet,
consectetur adipisicing elit, sed do
eiusmod tempor foo bar incididunt ut labore et
dolore foo bar

有一种方法可以在正则表达式中做到这一点,对吧?我不必去使用字符串等,对吗?

结果:

注意我不能很好地突出显示,但粗体给了你一个想法(虽然前后的空格也会被选中,但它打破了粗体)。

ipsum dolor foo bar Lorem ipsum dolor sit amet,
conectetur adipisicing elit, sed do
eiusmod tempor foo bar incididunt ut labore et
dolore foo bar

采用 PCRE 命名法。


2013 年 7 月 29 日更新:最好使用您选择的语言的搜索和替换功能来“删除”您不想要的短语,这样您就可以保留所需的信息想要。

最佳答案

一般来说,如果 foobar 匹配自身,那么 (?s:(?!foobar).)* 匹配任何不是的东西foobar,什么都不包含。

您可以使用它来查找其中没有 foobar 的行,例如,使用

^(?:(?!foobar).)*$

您还可以使用您的语言的 split() 函数来拆分 on foobar,这将为您提供所有包括拆分模式。

关于像 (*FAIL)(*COMMIT) 这样讨厌的鲜为人知的回溯控制动词,我还没有太多机会在​​ '非玩具程序。我发现通过 (?>...) 和所有格量词 *+, ++, ?+< 的独立子表达式 等给我足够的绳子,可以这么说。

也就是说,我确实有一个在 this answer 中使用 (*FAIL) 的玩具示例;这是第一个正则表达式解决方案。它存在的原因是我想强制正则表达式引擎回溯所有可能的排列;真正的目标只是计算它尝试了多少种方法。

请理解,我在那里的两个正则表达式,以及来自其他人的许多非常有创意的答案,都是有趣的、半开玩笑的东西。尽管如此,一个人可以从他们身上学到很多东西——一旦一个人从震惊中恢复过来。 ☺

关于regex - 我怎样才能用正则表达式找到除了某些短语之外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109147/

相关文章:

python - 从 HTML 中提取标签和属性 - 困难的方法

javascript - 如何使用正则表达式拆分具有不同符号和空格的字符串?

java - 如何为 HTML 简单文本制作正则表达式模式?

java - 正则表达式否定某个单词不起作用(Java 7)

正则表达式排除特定字符串,但不排除具有子字符串的字符串

regex - 如何否定正则表达式?

python - 在正则表达式组上使用数学函数

python -\b 正则表达式包括句点作为单词

java 用正则表达式分割字符串

javascript 正则表达式 帮助 Latex