PHP移除含特定role属性的标签问题求助
问题分析与解决方案
你的正则匹配逻辑完全错误,这是导致失效的核心原因:
- 原正则开头写的
~<role="button",试图匹配以<role="button"开头的标签,但实际你的标签是<span ... role="button",role属性是span标签内的一个属性,并非标签名,所以根本匹配不到目标内容。 - 另外,原正则的分组和匹配范围也没有覆盖完整的标签结构,无法正确捕获从起始标签到闭合标签的全部内容。
修正后的正则代码
$str = 'This is a test buton. <span id="UmniBooking_36" class="insideB" type="Form" style="cursor: pointer;color:" role="button" >Click here</span>'; // 匹配包含role="button"的任意标签(包括其内容和闭合标签) $str = preg_replace('~<([a-z]+)\b[^>]*role="button"[^>]*>(.*?)</\\1>~Usi', "", $str); echo $str;
正则说明
<([a-z]+)\b:匹配标签的起始部分,捕获标签名(比如span)到分组1,\b确保是完整的标签名[^>]*role="button"[^>]*>:匹配标签内任意位置的role="button"属性,前后的[^>]*表示标签内其他任意内容(直到标签闭合符>)(.*?):非贪婪匹配标签内的文本内容</\\1>:匹配对应的闭合标签,\\1引用分组1捕获的标签名,确保起始和闭合标签一致- 修饰符
Usi:U启用非贪婪模式,s让.匹配换行符,i忽略大小写(可选,根据需求调整)
内容的提问来源于stack exchange,提问作者lStoilov
相关产品推荐
相关产品推荐

