regex - 外卡匹配
问题描述
我需要匹配一个包含通配符 \ 和 . 在同一个句子中。如何用 Perl 做呢?
假设我的文件有以下句子:
ttterfasghti.
ddseghies/affag
hhail/afgsh.
asfsdgagh/
adterhjc/sgsagh.
我的预期输出应该是:
hhail/afgsh.
adterhjc/sgsagh.
解决方案
这感觉像是重复的,但我只是找不到一个好的先前问题。
因为/
有两种方式:
- 使用
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 结尾.
。
推荐阅读perlrequick、perlretut & perlre。
OP 在评论中阐明了要求后的更新:
$ perl <dummy.txt -ne 'print if m,/, && m{\.}'
hhail/afgsh.
adterhjc/sgsagh.
推荐阅读
- assembly - 在内存地址空间布局方面需要了解0x7fffffff和0xffffffff80000000背后的含义
- javascript - javascript/typescript 是否支持此处文档?
- .net-core - OmniSharp 不适用于 NUnit 项目
- kubernetes - 可以从集群外部访问服务,但不能从内部访问
- bootstrap-4 - 每行引导 5 列
- android - 删除 Android 上的后台位置访问权限
- asp.net - 使用 B2C 用户访问 API Linkedin
- javascript - Angular 9 SSR ReferenceError:stripe.elements 未定义
- c# - SQL 命令字符串 c#
- python - 使用for循环时删除打印语句中的最后一个字符