【问题标题】:Regex to identify all wrong HTML special chars正则表达式识别所有错误的 HTML 特殊字符
【发布时间】:2018-05-15 21:41:45
【问题描述】:

我有一个包含几个特殊字符的巨大 HTML,格式为  "�

其中一些是错误的,因为他们缺少开头的 &

我想搜索此类错误的空间字符。我知道我可以通过以下正则表达式搜索所有正确的特殊字符:

       \&(?:[a-z]+|#x?\d+);\

但我需要一个 正则表达式来搜索错误的表达式(没有初始 &)。 你能帮助我吗? 提前致谢

编辑:

按照建议,我将发布一个示例。我的 HTML 包含以下语句:

   <![CDATA[<nolink>blablabla&nbsp;blablabla</nolink>]]>quot;

我们有 2 个特殊的 HTML 字符:

  • &amp;nbsp;
  • quot;

我有兴趣找到第二个项目,因为它是错误的(缺少最初的 &)。

所以请求的正则表达式的输出应该是:quot;

【问题讨论】:

  • 不清楚您的目标是什么。发布不正确代码的示例,并更正输出。另外,如果你有一个像Some numbers are prime; but others are not 这样的句子(注意&amp;prime; 是一个有效的HTML 实体)怎么办?是什么让nbsp; 与众不同?
  • 所以你有一个可以应用的规则?就像它们最后都包含撇号一样吗?因为据我所知,您有 3 组相关的字符串:html 代码、错误的特殊字符和正确的特殊字符。据我了解,您无法使用它们独有的规则集将这些组分开,以将它们单独列出。这意味着您需要一个通用规则来处理错误的特殊字符。比如“不以&amp;开头但以;结尾。
  • 是的,你是对的。我正在寻找“不以 & 开头但以 ; 结尾”的规则它只隔离了上述三个相关字符串组中的错误特殊字符。

标签: regex regex-negation


【解决方案1】:

你可以建立在

(?<!&)(?:\b(?:nbsp|quot|divide)|#[0-9a-f]+);

添加您需要的“特殊字符”。

这个简单的匹配一个序列,前面没有&amp;(?&lt;!&amp;) 的负面后视确保了这一点),要么是

  • nbsp
  • quot
  • 十六进制数,前缀为# (#[0-9a-f]+)

(添加不区分大小写的标志以使十六进制字符能够大写。)

See it here at regex101.

编辑
在“单词实体”之前添加了对 分词 (\b) 的检查,以确保它不匹配部分实体(如果有的话)。

编辑 2
让一个通用的 re 匹配所有实体(可能还有其他非实体词)尝试

(?<!&)(?:\b(?:[a-z]{2,8}\d{0,2})|#[0-9a-f]+);

Here at regex101.

【讨论】:

  • 非常感谢!我很容易修改你的例子插入 divide; 错误的特殊字符。正则表达式几乎是完美的,但它也匹配 ivide;(或者也匹配 bsp;):see the example
  • 更新了正则表达式和示例。
  • 解决方案很好,但不够通用:问题是我不知道 HTML 中有哪些特殊字符。正则表达式运行良好,但它迫使我指定所有可能的情况。这里是所有特殊字符的列表:HTML Codes Table
  • 所以你想了解Text with nbsp; hereList of names; Arnold, Sylvester之间的区别吗?
  • 一点也不:类型:List of names;的出现次数很低,我不担心
【解决方案2】:

我试过了:\s(?!&amp;)[A-Za-z0-9]+;

Regex101 尝试过

&wudhilweuh212313i9dioed;  wcihecrehc; &wkjdnwkne13131; eiou2ei; 1121i2093;
qeoidjwidw29i1291; 

匹配

wcihecrehc; eiou2ei; 1121i2093;
qeoidjwidw29i1291;

我的例子只是随机性。为什么?据我了解,您想要任何具有由A-Za-z0-9 组成的字符串的字符串,它确实以空格字符开头,而不是&amp;,并以; 结尾。所以我不想让它太受限制。

【讨论】:

  • 是的,不幸的是,“确实以空格字符开头”的声明是一个过于严格的限制,因为大多数特殊字符都不以空格开头
猜你喜欢
  • 2012-12-03
  • 2023-03-16
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多