正则表达式需求:匹配前后无点号的字母数字单词
正则表达式匹配无前后点号的字母数字单词
需求:编写正则表达式,匹配**前后均不包含点号(.)**的字母数字单词。
测试字符串:
String = table.field1 + field2
期望仅捕获单词field2,但当前使用的正则匹配结果过多,当前正则为:
(table\.[a-zA-Z0-9-_]+)|(?<!\.)[a-zA-Z0-9-_]+
问题分析
当前正则逻辑存在缺陷:前半段匹配table.xxx格式的内容,后半段仅限制了单词前面没有点号,但未限制后面也不能有点号,导致table这种后跟点号的单词也被匹配,同时field1会被前半段分支命中,完全不符合需求。
解决方案
要实现「前后均无点号」的精准匹配,需同时用负向零宽断言限制前后字符,结合单词边界确保匹配完整单词:
最终正则表达式:
(?<!\.)\b[a-zA-Z0-9_-]+\b(?!\.)
正则解释
(?<!\.):前置负向断言,确保匹配的单词前面不是点号\b:单词边界,避免匹配单词的部分片段[a-zA-Z0-9_-]+:匹配由字母、数字、下划线、连字符组成的完整单词(?!\.):后置负向断言,确保匹配的单词后面不是点号
该正则会精准匹配field2,同时排除table(后跟点号)和field1(前跟点号)。
内容的提问来源于stack exchange,提问作者lebon thomas
相关产品推荐
相关产品推荐

