正则匹配问题:无法正确提取title="后的指定目标文本值
正则匹配提取目标值解决方案
问题原因
当前使用的正则(?<=title=")(.*)存在两处逻辑缺陷,导致匹配结果不符合预期:
- 未做属性值边界限制:默认贪婪匹配规则下会跨行捕获内容,把属性结束引号之后、换行后的
Message: User这类无关文本也纳入匹配范围 - 未兼容多属性结构:没有区分空值
title=""、普通带值title="xxx"、data-original-title="xxx"三种场景,空title场景下会把后续整段HTML内容都误匹配进来
可用正则方案
使用如下正则即可同时覆盖两类代码行结构,精准提取目标值ITOM Control Board Major Alarm 4 Set:
(?:title|data-original-title)="([^"\r\n]+)
规则说明
(?:title|data-original-title)=":用非捕获组匹配两种存储目标值的属性前缀,同时覆盖title直接存值、title为空时data-original-title存值的两种场景([^"\r\n]+):捕获组匹配属性值内容,遇到双引号、回车、换行符就立即终止匹配,既不会把属性结束引号后的无关内容纳入结果,也不会跨行捕获换行后的Message相关文本
匹配效果验证
- 针对
title=""搭配data-original-title="目标值"的代码行:自动跳过空的title属性,正确捕获data-original-title属性内的目标文本 - 针对直接写
title="目标值"的代码行:直接捕获title属性内的目标文本 - 两类场景下均不会带入换行后的
Message: User无关内容
内容的提问来源于stack exchange,提问作者Flynn Rider
相关产品推荐
相关产品推荐

