首页 > 解决方案 > 外卡匹配

问题描述

我需要匹配一个包含通配符 \ 和 . 在同一个句子中。如何用 Perl 做呢?

假设我的文件有以下句子:

ttterfasghti.
ddseghies/affag
hhail/afgsh.
asfsdgagh/
adterhjc/sgsagh.

我的预期输出应该是:

hhail/afgsh.
adterhjc/sgsagh.

标签: regexperl

解决方案


这感觉像是重复的,但我只是找不到一个好的先前问题。

因为/有两种方式:

  • 使用m//具有不同分隔符的运算符,例如m,<regex with />,, m{<regex with />}, 或
  • 逃避它,即/\//

用于.转义。

请注意,在字符类 ( [...]) 中,许多特殊字符不再需要转义。

因此我们得到:

$ perl <dummy.txt -ne 'print "$1: $_" if m,(\w+/\w*\.),'
hhail/afgsh.: hhail/afgsh.
adterhjc/sgsagh.: adterhjc/sgsagh.

即,如果该行包含一个或多个单词字符,则打印该行,后跟 a /,零个或多个单词字符,以 a 结尾.

推荐阅读perlrequickperlretut & perlre


OP 在评论中阐明了要求后的更新:

 $ perl <dummy.txt -ne 'print if m,/, && m{\.}'
 hhail/afgsh.
 adterhjc/sgsagh.

推荐阅读