如何编写正则表达式匹配第三段含boomer或millenial的路径
符合需求的正则表达式
第三段完全匹配boomer/millenial(与示例规则一致)
^/content/au/(?:boomer|millenial)(?:/.*)?$
表达式逻辑拆分
^:匹配字符串的起始位置,避免前缀出现多余字符/content/au/:精确匹配固定的前两级路径(?:boomer|millenial):匹配第三级路径只能是boomer或者millenial,非捕获分组不会生成额外的冗余分组结果(?:/.*)?:匹配第三级之后的可选路径,?标识第三级之后可以没有内容,.*匹配后续所有合法路径字符$:匹配字符串的结束位置,避免部分匹配导致的误判
匹配验证
匹配成功的路径
/content/au/boomer/content/au/boomer/male/31/content/au/millenial/female/29/M/content/au/millenial/male/18/UM
匹配失败的路径
/content/au:缺少第三级路径/content/nz/millenial/male/18/UM:第二级路径不是au/content/au/genz/male:第三级路径不是指定值
补充:第三段包含boomer/millenial的场景
如果需求是第三段只要包含这两个字符串即可(比如/content/au/boomer123也可匹配),可以改用以下表达式:
^/content/au/[^/]*(?:boomer|millenial)[^/]*(?:/.*)?$
原正则问题说明
你之前编写的^/content/au/(?![^/]*/(?:millenial|boomer))([^/]*)使用了负向前瞻?!,逻辑是排除包含目标词的路径,和需求完全相反,同时也没有限制目标词必须出现在第三段,因此无法达到预期效果。
内容的提问来源于stack exchange,提问作者SubSul
相关产品推荐
相关产品推荐

