【问题标题】:ack regex: Matching two words in order in the same lineack regex:在同一行中按顺序匹配两个单词
【发布时间】:2011-04-09 20:42:18
【问题描述】:

我想在文件中查找包含两个单词的行,依次为word_1word_2,例如下面的Line A,但不是Line BLine C

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 ....
Line C: ... word_2 ....

我试过了

$ack '*word_1*word_2'
$ack '(word_1)+*(word_2)+'

以及在正则表达式开头附加 ^ 的相同命令(试图遵循 Perl 正则表达式语法)。

这些命令都不会返回我感兴趣的文件或行。

我做错了什么?

谢谢!

【问题讨论】:

    标签: regex ack


    【解决方案1】:

    你想找到word_1,然后是任何东西,任意次数,然后是word_2。那应该是

    word_1.*word_2
    

    您似乎在使用*,因为它经常用于命令行搜索,但在正则表达式中,它是前一个字符的量词,意味着匹配它至少 0 次。例如,正则表达式 a* 将匹配 0 个或多个 as,而正则表达式 a+ 将匹配至少一个 a

    表示“匹配任何东西”的正则表达式元字符是.,因此.* 表示“匹配任何东西,任意次数。有关该主题的简要介绍,请参见perlrequick

    【讨论】:

    • 谢谢@dsolimano!你写的和:.*word_1.*word_2 之间会有什么区别吗?如果不是,为什么?
    • 有点,但不适合您正在查看的内容。这也将匹配在线上word_1 之前的所有内容。如果您正在查看匹配的内容,而不是匹配与否,您会在匹配中看到更多内容。如果你有一些现金和时间,我会推荐阅读 Friedl 的“掌握正则表达式”,它非常棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多