使用正则表达式清除无效的 HTML 代码

使用正则表达式清除无效的 HTML 代码

我需要一个 pcre 正则表达式来选择所有不带 src 部分的 html img 标签。说来话长。在帮助下,我成功了,直到某一行出现了第二个带有 src 部分的 img 标签。正则表达式将第一个与最后一个(?-s)<img(?!.*?src).*?\/>匹配:(<img/>

我怎样才能从中选出坏的部分<img border="0" />

<p align="center"><img border="0" /> <a href="http://www.megaevent2014.com/enllac/"><img alt src="http://www.megaevent2014.com/banner/gran/" /></a></p>

在一个正则表达式中。

而且 img 标签可能由于多种原因而无效。删除“border”也无济于事。我需要选择没有 src 的标签,而不必关心其他任何事情。

请提供建议,谨致问候,彼得

答案1

以下正则表达式模式适用于我,并且对于 PCRE Regex 来说应该是格式正确的:

<img(\s*(?!src)([\w\-])+=([\"\'])[^\"\']+\3)*\s*\/?>
  • 为了将其分解,首先从文字开始<img,然后\s*匹配任何空格字符[\r\n\t\f ]零次或无限次。
  • (?!src)负向前瞻,确保字符串src不是匹配。
  • 第二个捕获组([\w\-])+搜索一次到[a-zA-Z0-9_]无限次之间的任意次,并且是贪婪的(尽可能多地找到它),并且\-是在标签对中的某处存在连字符的情况下寻找文字<img>
  • =是对等号的文字搜索。
  • 第三个捕获组,([\"\'])[^\"\']+\3尝试匹配单引号或双引号,然后匹配任何内容单引号或双引号(一次或多次),然后匹配\3作为第三个捕获组找到的内容(单引号或双引号)。
  • 最后,\s*匹配任何空格字符[\r\n\t\f ]零次或无限次,\/?匹配正斜杠一次,是>整个事件的结束括号。

正则表达式很有趣。:-)

相关内容