0

如果我的文件内容是:ABC DEF GHI JKL MNO PQR STU VWXYZ,如何使用简单的正则表达式搜索此文件以查看它是否包含:ABCDEF

我需要以下两种情况:

  1. ABC, DEF[真]
  2. BAC, ABC[错误]
  3. DEF, ABC[真]
  4. CDE, ABC[错误]

最终,我正在搜索数千个文件以查看它们是否包含两个单词。我可以很容易地匹配一个,但不是两个。

更新

我还需要这个正则表达式来处理多行。因此,如果第一个字符串位于第 1 行,第二个位于第 100 行,我仍然需要正则表达式来匹配。我在我的文本编辑器中使用正则表达式的Boost 语法:SublimeText2。

更新 2

回答:(?s)(abc.*def|def.*abc)

4

3 回答 3

3

使用交替以任一顺序检查字符串,由任何内容分隔:

ABC.*DEF|DEF.*ABC
于 2013-03-22T15:45:01.037 回答
1

如果您正在搜索不同的单词,使用单词边界很重要:

(\bABC\b.*?\bDEF\b|\bDEF\b.*?\bABC\b)

否则你会匹配ABCDEFABC DEFINITION

于 2013-03-22T15:50:01.117 回答
1
grep -P  -l -z -i 'abc[\w\s]*def|def[\w\s]*abc' *

你应该能够使用类似上面的东西。

PCRE 的高级正则表达式功能需要 -P。

-l 将使其按名称列出匹配的文件。

-z 将使它忽略匹配中的行尾。

-i 将使其不区分大小写。

但是,根据您的需求细节,这可能有点矫枉过正。

同样,特定于使用 grep 的 PCRE 样式的正则表达式。

在其他工具中,您可能不需要取消 EOL 字符等。

没有考虑单词边界。

于 2013-03-22T15:57:01.173 回答