如何在正则表达式中设置整词可选?现有正则优化需求
正则表达式优化方案
需要匹配的目标内容包括:apple and lemon、apple lemon、apple and、apple,要求and和lemon都设为可选项。
原正则问题分析
你当前的正则里,lemon对应的字母分组是强制匹配的,没有设置为可选规则,所以无法单独匹配apple或apple and这两种情况。
优化后的正则表达式
\b([a][\W_]*?)+([p][\W_]*?)+([p][\W_]*?)+([l][\W_]*?)+([e][\W_]*?)+(?:(([a][\W_]*?)+([n][\W_]*?)+([d][\W_]*?))(?:([l][\W_]*?)+([e][\W_]*?)+([m][\W_]*?)+([o][\W_]*?)+([n][\W_]*?))?|([l][\W_]*?)+([e][\W_]*?)+([m][\W_]*?)+([o][\W_]*?)+([n][\W_]*?)?)?\b
修改说明
- 把
lemon的字母分组整体包装成可选结构,同时覆盖两种合法组合:and后面可带可选的lemonapple后面可直接带可选的lemon(无需and)
- 使用非捕获分组
(?:...)减少不必要的捕获组,保留你原正则中字母拆分加任意非单词/下划线分隔的格式。
匹配验证
- 可匹配
apple:仅匹配核心单词部分 - 可匹配
apple and:匹配apple加可选的and - 可匹配
apple lemon:匹配apple加可选的lemon - 可匹配
apple and lemon:匹配完整的apple + and + lemon结构
内容的提问来源于stack exchange,提问作者allton
相关产品推荐
相关产品推荐

