如何通过正则表达式提取HTML里<br>后、-前的5132内容?
正则表达式提取特定内容的正确写法
嘿,我来帮你搞定这个问题~你之前写的正则有两个小问题:一是(*?)是无效语法,二是这个正则只是匹配整个span标签的内容,根本没定位到你要的<br>之后、-之前的区域,所以自然提取不到5132啦。
针对你的需求,这里有两个靠谱的正则方案:
方案1:专门匹配数字(适合确定目标是数字的情况)
$pattern = '/<span class="_c1subtitle_c1">.*?<br>\s*(\d+)\s*-.*?<\/span>/s';
我给你拆解下每个部分的作用:
.*?<br>:非贪婪匹配到<br>标签,跳过前面的"Name"内容\s*:匹配<br>后面可能存在的空格(你的例子里有个空格,这个能覆盖)(\d+):用捕获组提取我们想要的数字(也就是5132),后续可以通过捕获组获取这个值\s*-:匹配数字后面的空格和减号.*?<\/span>:匹配剩下的内容直到span标签结束/s修饰符:让.可以匹配换行符,就算内容里有换行也不影响
方案2:匹配任意字符直到-(如果目标内容不一定是数字)
$pattern = '/<span class="_c1subtitle_c1">.*?<br>\s*([^-]+)\s*-.*?<\/span>/s';
这里把\d+换成了[^-]+,意思是匹配不是减号的任意字符,这样就算目标是字母或者其他符号也能提取到。
用这个正则匹配你的HTML内容后,捕获组1里就是你要的5132啦~
内容的提问来源于stack exchange,提问作者Timo
相关产品推荐
相关产品推荐

