正则表达式匹配指定HTML内容失败问题咨询
正则表达式匹配指定HTML内容失败问题咨询
嘿,我来帮你排查下这个问题~ 你的思路其实是对的,用[\s\S]*?来匹配任意字符(包括换行)确实比.*?更靠谱,但这次匹配失败大概率是因为HTML里的标签之间存在你没考虑到的空白字符(比如换行、空格或者制表符)。
举个例子,你写的正则是完全紧凑的标签字符串:
<h3 class="font-weight-normal" itemprop="name"><a href="javascript:void(0)" class="color-black">([\s\S]*?)</a></h3>
但实际页面里的HTML可能是这样的(标签之间有换行和缩进):
<h3 class="font-weight-normal" itemprop="name"> <a href="javascript:void(0)" class="color-black">I LOVE PRINCE</a> </h3>
这时候你的正则就会因为标签之间的空白不匹配而失败。
解决方案:在标签之间加入空白匹配规则
修改后的正则会允许标签之间存在任意数量的空白字符,调整后的写法如下:
<h3 class="font-weight-normal" itemprop="name">\s*<a href="javascript:void(0)" class="color-black">([\s\S]*?)</a>\s*</h3>
这里的\s*代表匹配0个或多个空白字符(包括换行、空格、制表符),这样不管HTML里的标签排版是紧凑还是换行缩进,都能精准匹配到中间的I LOVE PRINCE内容。
另外补充个小提醒:如果是在某些正则工具或编辑器里,记得确认是否开启了“多行匹配”模式(不过你用[\s\S]*?其实已经绕过了这个限制)。如果还是不行,可以检查下正则里的引号、标签拼写是否和实际HTML完全一致哦~
备注:内容来源于stack exchange,提问作者Just Me
相关产品推荐
相关产品推荐

