【发布时间】:2016-10-19 20:03:01
【问题描述】:
我似乎仍然无法消极地向后看。我有一种情况,我希望能够匹配其中包含某个字符串的所有行,前提是它们 不 在其之前有某个其他字符串 anywhere。我希望能够找到所有带有“_view”且后面没有“ora”的行。所以“blahblahorablahblah_view”不应该匹配,但“blahblah_view”应该匹配。我已经尝试将(?<!ora) 与_view 配对,但它总是会遇到一些在“_view”之前不是“ora”的东西。 [^(ora)] 似乎也没有得到我想要的。
我也尝试向Perl: Matching string not containing PATTERN 学习,但这并没有让我有所收获。 (它似乎并没有按照我想要的方式混合正负匹配)
我也在使用https://regex101.com,了解它是一种用于诊断正则表达式的强大而通用的工具。
我使用的不是 Perl 或 Java,而是 IDE (PhpStorm),所以适用于 grep 的东西应该已经足够好了。
【问题讨论】:
-
您使用的是什么 IDE?另外,为什么要使用lookbehind? Regex101 不支持无限宽度的后视,因为该站点支持 PCRE/JS 和 Python 正则表达式风格。这仅在一些正则表达式风格中受支持。您可以使用
^(?!.*oca.*_view).*_view基于一个lookahead。 -
能否格式化您的问题并添加您使用的 IDE?
-
@Jan:这个不能保证“oca”在“view”之前,它可以在字符串的任何位置。
-
@CasimiretHippolyte:没错,
^(?:(?!oca).)*view.*$