Perl 中的模式匹配修饰符

修饰符作用
/a按照 ASCII 的语义展开
/u按照 Unicode 的语义展开
/l按照 Locale 的语义展开
/d按照 “传统” 行为,即 Perl 自己的推断对字符意义做出最为妥帖的阐释
/i进行大小写无关的匹配
/s匹配任意字符
/x加入空白符(便于模式的阅读

/a
对一些使用频率较高的字符集,Perl 提供了简写,但由于 Unicode 下字符集包含的字符远远多于 ASCII 下的字符集,为了让模式严格按照 ASCII 的范围来匹配,需要追加 ‘/a’ 来对模式进行修饰:

if (/HAL-[\d]+/) {
    # 匹配除了 ASCII 里面的 0 到 9 之外
    # 还能匹配其他语言中的数字字符,比如蒙古文或泰文计数
}

if (/HAL-[\d]+/a) {
    # 按照 ASCII 字符语义解释
}

/i
用于实现大小写无关的模式匹配:

if (/yes/i) {
    # 匹配 YES、yes、Yes 等大小写组合
}

/s:将模式中的每个点号转换成字符集 [\d\D],这样就能匹配到包括换行符在内的任意字符。

$_ = "I saw Barney\ndown at the bowling alley\nwith Fred\nlast night.\n";

if (/Barney.*Fred/s) {
    # 没有 /s 上面的判断就会失败
    # 因为点号(.)无法匹配换行符
}

/x:允许在模式里随意加上空白符从而更易阅读、理解:

if (/-?[0-9]+\.?[0-9]*/) {
}

if (/-? [0-9]+ \.? [0-9]* /x) {
}

多个修饰符可以组合在一起使用,只需要把它们接在一起写在模式末尾即可,并且不需要考虑先后顺序:

if (/barney.*fred/is) {
    # 同时使用 /i 和 /s
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值