求匹配指定数量大写字母且忽略链接中大写的正则表达式
匹配指定数量大写字母(忽略网页链接内容)的正则表达式方案
需求明确
需要匹配以大写字母开头,后跟至少5个大写字母或数字的序列(总长度≥6),同时排除网页链接(包括<a>标签的href属性值、标签内的链接文本)中的此类序列。
解决方案正则
(?<!<a[^>]*>)(?<!href="[^"]*)[A-Z][A-Z\d]{5,}(?!.*<\/a>)(?!"[^"]*>)
规则解释
(?<!<a[^>]*>):负向后顾断言,确保匹配的序列不在<a>起始标签之后的文本区域内(?<!href="[^"]*):负向后顾断言,确保匹配的序列不在href属性的引号内容里[A-Z][A-Z\d]{5,}:核心匹配规则,匹配大写字母开头,后续至少5个大写字母或数字的组合(?!.*<\/a>):负向前瞻断言,确保匹配的序列之后不会出现</a>结束标签(即不在<a>标签范围内)(?!"[^"]*>):负向前瞻断言,确保匹配的序列不在href属性的引号闭合前
示例验证
- 匹配:
ABCDEFG、abcDEFG(符合核心规则且不在链接区域) - 不匹配:
<a href="https://stackoverflow.com/ABCDEFG">https://stackoverflow.com/ABCDEFG</a>(两个目标序列分别处于href属性和<a>标签文本内,被断言排除)
注意事项
如果使用的正则引擎不支持无限长度环视(比如JavaScript),需要调整为分段处理:先过滤掉所有<a>标签内容,再用原正则匹配剩余文本。
内容的提问来源于stack exchange,提问作者Gilles
相关产品推荐
相关产品推荐

