正则表达式:如果有不需要的东西则不匹配行
Regex: not matching line if it has something unwanted
我似乎仍然无法得到负面的回顾。我有一种情况,我希望能够匹配其中包含特定字符串的所有行,前提是它们 不 具有特定的其他字符串 anywhere 在它之前。我希望能够找到所有带有“_view”但后面没有 "ora" 的行。所以“blahblahorablahblah_view”不应该匹配,但是“blahblah_view”应该匹配。我试过将 (?<!ora)
与 _view
配对,但它总是命中某些东西 w/that 在“_view”之前有任何不是 "ora" 的东西。 [^(ora)]
似乎也没有得到我想要的东西。
我也尝试向 Perl: Matching string not containing PATTERN 学习,但这并没有让我有任何收获。 (它似乎没有按照我想要的方式混合正面和负面匹配)
我也在使用 https://regex101.com 了解它是用于诊断正则表达式的强大而通用的工具。
我没有使用 Perl 或 Java,而是 IDE (PhpStorm),所以适用于 grep
的内容应该足够好。
至少有两种可能:
使用环视的那个:
^(?!.*ora.*_view).*_view.*
(容易写但效率不高,因为可能会造成大量回溯)
使用否定符的类:
^[^o_]*(?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*_view.*
或带有所有格量词的版本(如果可用):
^[^o_]*+(?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*+_view.*
或模拟所有格量词的版本(如果不可用):
^(?=([^o_]*))(?=((?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*))_view.*
除非您的 IDE 使用 .net 正则表达式引擎 (允许可变长度回顾) 或至少 Java 正则表达式引擎 (允许有限的可变长度后视),这里无法使用后视。
我似乎仍然无法得到负面的回顾。我有一种情况,我希望能够匹配其中包含特定字符串的所有行,前提是它们 不 具有特定的其他字符串 anywhere 在它之前。我希望能够找到所有带有“_view”但后面没有 "ora" 的行。所以“blahblahorablahblah_view”不应该匹配,但是“blahblah_view”应该匹配。我试过将 (?<!ora)
与 _view
配对,但它总是命中某些东西 w/that 在“_view”之前有任何不是 "ora" 的东西。 [^(ora)]
似乎也没有得到我想要的东西。
我也尝试向 Perl: Matching string not containing PATTERN 学习,但这并没有让我有任何收获。 (它似乎没有按照我想要的方式混合正面和负面匹配)
我也在使用 https://regex101.com 了解它是用于诊断正则表达式的强大而通用的工具。
我没有使用 Perl 或 Java,而是 IDE (PhpStorm),所以适用于 grep
的内容应该足够好。
至少有两种可能:
使用环视的那个:
^(?!.*ora.*_view).*_view.*
(容易写但效率不高,因为可能会造成大量回溯)
使用否定符的类:
^[^o_]*(?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*_view.*
或带有所有格量词的版本(如果可用):
^[^o_]*+(?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*+_view.*
或模拟所有格量词的版本(如果不可用):
^(?=([^o_]*))(?=((?:o(?!ra)[^o_]*|_(?!view)[^o_]*)*))_view.*
除非您的 IDE 使用 .net 正则表达式引擎 (允许可变长度回顾) 或至少 Java 正则表达式引擎 (允许有限的可变长度后视),这里无法使用后视。