如何实现无需逐个加OR的多正则表达式批量匹配(类字符串包含法)
批量正则匹配的优化实现
我来给你捋捋怎么实现这种批量正则匹配的方式,完美解决你维护麻烦的问题~
核心思路是把所有需要匹配的正则模式合并成一个单一的正则表达式,用|分隔不同的规则,然后把这个合并后的表达式存入变量,这样后续维护只需要修改变量里的内容即可,不用再写一堆or连接的matches调用。
具体步骤:
合并正则模式
把你原来的多个前缀匹配规则,合并成一个带分组的正则表达式(这样^只需要匹配一次,更高效):
原来的:'^cresc' or '^decresc' or '^diminuendo'
合并后:'^(cresc|decresc|diminuendo)'
以后要加新规则,直接在括号里加|新规则就行,比如'^(cresc|decresc|diminuendo|ritardando)'。存入变量方便维护
在XSL里定义一个变量来存放这个合并后的正则:<xsl:variable name="match-patterns" select="'^(cresc|decresc|diminuendo)$'" />(如果不需要严格匹配整个字符串,只是前缀匹配的话,可以去掉结尾的
$)简化matches调用
现在只需要一次matches调用就能实现批量匹配:direction-type/words[matches(., $match-patterns)]
额外注意事项:
- 如果你的正则模式里包含正则特殊字符(比如
.、*、+等),记得要转义(用\),避免正则解析出错。 - 如果需要忽略大小写匹配,可以给
matches添加第三个参数'i':direction-type/words[matches(., $match-patterns, 'i')]
这样写法既简洁,又方便后续添加或修改匹配规则,完全达到你想要的类似contains批量匹配的灵活效果~
内容的提问来源于stack exchange,提问作者CC Inc
相关产品推荐
相关产品推荐

