好的,所以我有一个短语“foo bar”,我想找到除“foo bar”之外的所有内容。
这是我的文字。
ipsum dolor foo bar Lorem ipsum dolor sat amet,
脂肪精英协会
eiusmod tempor foo bar incididunt ut Labore et
多洛·福酒吧
有一种方法可以在正则表达式中做到这一点,对吗?我不必去使用字符串等,不是吗?
RESULT:
注意我无法很好地突出显示,但粗体可以给您一个想法(尽管之前和之后的空格也会被选择,但它会破坏粗体)。
痛苦的事 foo bar Lorem ipsum dolor 坐 amet,
脂肪精英协会
时间模式 foo bar 劳动等事件
dolore foo bar
假设 PCRE 命名法。
2013 年 7 月 29 日更新:最好使用您选择的语言中的搜索和替换功能来“删除”您不需要的短语,这样您就可以得到您想要的信息。
一般来说,如果foobar
匹配自身,那么(?s:(?!foobar).)*
匹配任何东西not foobar
,包括什么都没有。
你可以用它来查找没有的行foobar
在其中,例如,使用
^(?:(?!foobar).)*$
您也可以使用您的语言split()
分割函数on foobar
,这会给你所有的部分not包括分割模式。
关于令人讨厌的鲜为人知的回溯控制动词,例如(*FAIL)
and (*COMMIT)
,我还没有太多机会在“非玩具”程序中使用它们。我发现独立的子表达式通过(?>...)
和所有格量词*+
, ++
, ?+
等等,可以这么说,给我足够多的绳子。
也就是说,我确实有一个使用的玩具示例(*FAIL)
in 这个答案 https://stackoverflow.com/questions/4092348/in-perl-how-can-i-generate-an-array-with-random-values-without-using-a-loop/4092746#4092746;这是第一个正则表达式解决方案。它存在的原因是我想强制正则表达式引擎回溯所有可能的排列;真正的目标只是计算它尝试了多少种方法。
请理解,我的两个正则表达式,以及其他人提供的许多非常有创意的答案,都是为了有趣、半开玩笑的。尽管如此,一can一旦一个人从震惊中恢复过来,就可以从他们身上学到很多东西。 ☺
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)