欢迎光临散文网 会员登陆 & 注册

开源阅读替换教程&正则替换五步走(下)

2022-09-07 09:05 作者:本雁霜晨月  | 我要投稿


五、精简——精简通用规则

分支选择——方括号[]和竖线|的使用

如在上个教程的示例④中

原文:(多谢/感谢)书友xx的(鲜花/打赏/刀片)

替换规则:[感多]谢.*(鲜花|打赏|刀片)

      这里开头包含“多谢”“感谢”2种情况,结尾包含“鲜花”“打赏”“刀片”3种情况,排列组合后则共有6种情况,如果我们对这6种情况原模原样替换的话,就需要6种情况写6条规则,这显然是不划算的。

       这时,用“[多感]谢”表示“多”“感”任选其一与谢组合,就把“感谢”与“多谢”这两种情况合二为一,大大简化了规则篇幅;用“鲜花|打赏|刀片”

表示“鲜花”“打赏”“刀片”三者任选其一,也是同样的效果。

       看到这里,你也许会产生两个疑问:

       为什么一个用中括号[]一个用竖线|❓

       竖线|的内容为什么要加括号()❓

       解答第一个问题需要我们明白中括号[]与竖线|的区别:中括号[]是任选其中之一,必须且只能选择其中一个字符,两个以上字符的情况则只能用竖线|表示,当然竖线|也适用一个字符。

       解答第二个问题需要我们明白正则匹配时的优先级:我们用数学里面的四则运算来类比。一般的正则可以看作加减法,优先级是从左到右,即一般的正则是从左到右依次生效的;如果遇到乘除法或者括号,则需要遵循“从左到右,从内到外”的顺序,这里的括号()和竖线|就是如此,如果规则写成“[感多]谢.*鲜花|打赏|刀片”,就变成了“[感多]谢.*鲜花”“打赏”“刀片”三者任选其一,用“(鲜花|打赏|刀片)”则先在“鲜花”“打赏”“刀片”三者任选其一,再与“[感多]谢.*”组合。

     此外,示例①匹配网址中的“[::]”就包含了中英文两种冒号的情况,后面的“[a-z\.\d\/\?#]+”则列举了网址中常出现的数字、字母、点、斜线等字符,保证出现这些字符的网址都能匹配到。其他示例也是类似。

     那么中括号[]能否和竖线|组合使用呢?当然是可以的。例如我们将示例④改为

原文:(多谢/感谢)书友xx的(投票/月票/推荐票)

替换规则:[多感]谢.*([投月]|推荐)票

也可写成:[感多]谢.*(投|月|推荐)票

开源阅读替换教程&正则替换五步走(下)的评论 (共 条)

分享到微博请遵守国家法律