正则表达式匹配xxxx.xxxx模式,排除含$"xxxx.xxxx"的内容
匹配
xxxx.xxxx模式并排除"$xxxx.xxxx"格式的正则表达式 需求
匹配由字母、数字、下划线组成的xxxx.xxxx格式字符串,但要排除被"$开头、"结尾包裹的这类内容。
示例输入
"$xxxx.xxxxx" aaaa.aaaaaa bbbb.bbbbb "$gggg.hhhh"
当前正则与问题
你现在用的正则:
(\w+\.\w+)[^"]
这个正则存在两个明显问题:
- 没有排除逻辑,引号里的
xxxx.xxxxx会被匹配,只是因为[^"]排除了最后的引号,导致结果少了一个字符 - 无法区分引号内的目标内容和正常的目标内容
实际匹配结果
xxxx.xxxx aaaa.aaaaaa bbbb.bbbbb gggg.hhh
期望匹配结果
aaaa.aaaaaa bbbb.bbbbb
解决方案
用负向断言实现排除逻辑,以下正则可以满足需求:
(?<!\$")\b\w+\.\w+\b(?!")
正则解释
(?<!\$"):检查当前匹配内容的前面不是$",避免匹配"$开头的引号内内容\b:单词边界,保证匹配的是完整的xxxx.xxxx,不会出现部分截取\w+\.\w+:核心匹配逻辑,对应xxxx.xxxx格式(?!"):检查当前匹配内容的后面不是",进一步确保不会匹配引号内的内容
用这个正则匹配示例输入,就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Pakorn K
相关产品推荐
相关产品推荐

