正则表达式不匹配这个或那个

卡里克

我正在尝试删除除斜体,粗体或跨度标签以外的所有标签,并且似乎无法使其正常工作。

目前,我有:

/[^i|b|span]/g

我知道[]是范围,并且[span]将匹配s,p,a,n,而不是整个单词。

所以我的问题是如何陈述: not: "tag1" or "tag2"?

编辑我早些时候发现了“重复”问题,但并没有解决我的问题。

钟洁

这应该至少在相当整齐的HTML上有效:

</?\s*(?!(i|b|span)\b)\w+[^>]*>

逐一解释(由http://rick.measham.id.au/paste/explain.pl提供):

NODE                   EXPLANATION
 <                     literal '<'
/?                     '/' (optional)
\s*                    any whitespace (\n, \r, \t, \f, and " ") (0 or
                       more times (matching the most amount
                       possible))
(?!                    look ahead to see if there is not:
  (                      start of OR'ed group
    i                        'i'
   |                        OR
    b                        'b'
   |                        OR
    span                     'span'
  )                      end of the OR'ed group
  \b                     the boundary between a word char (\w)
                         and something that is not a word char
)                      end of look-ahead
\w+                    word characters (a-z, A-Z, 0-9, _) (1 or
                       more times (matching the most amount
                       possible))
[^>]*                  any character except: '>' (0 or more times
                       (matching the most amount possible))
>                      literal '>'

现在,这是用英语做什么的?

  1. 寻找任何标签的开始 <
  2. 与可选标签结尾匹配,/因为您想同时找到开始和结束标签(<body></body>
  3. 跳过任何数量的空格(这是允许的,并且-在其他地方考虑它,因此,如有必要,请添加味道。​​)
  4. 否定前瞻的开始。这就是WiktorStribiżew所指的内容,并在正则表达式中进行了深入解释,以匹配不包含单词的行?
  5. 匹配的词组的OR列表不会出现在前行中。我加上括号将它们分组,因为...
  6. 还有其他以b开头的标签i括号后跟\b是,以确保它仅与“或”列表中的“整个单词”匹配。
  7. 以下\w+是匹配遵循任何标记(其中,我想提醒你,可能不会ibspan每负极前瞻)。
  8. 但是HTML标记并不止于此!(至少,打开标签没有。)在标签名称本身之后,可能会出现几乎任何数量的属性。有一个规则,大多数HTML编辑器和软件随便观察到,该角色>可能不会出现这样的属性里面-它应该被编码为&gt;因此,要在标签的末尾匹配所有内容,请跳过所有不匹配的内容>
  9. ...以决赛结束>,以配合比赛结束。

为什么在顶部警告“ HTML整洁”?因为即使对HTML进行了详尽的描述,但手动输入HTML的软件和(alas)人员都不会遵守所有这些讨厌的规则。此正则表达式可能会出现一些可能的问题:

  1. 自动关闭标签。<br />不会被抓住。
  2. >属性值未转义<img title="a > b">会令人窒息–<img标题的前半部分将被删除,而后半部分和最后一个>字符将保留下来。
  3. 随机大写。HTML标记中的大小写无关紧要,您可以<B>使用</b>-来打开和关闭-但默认情况下,正则表达式通常区分大小写。您的正则表达式风格可能带有“忽略大小写”标志;如果不是,则还需要添加大写字符。
  4. 公然的HTML格式。(无法治愈。)
  5. 可能还有无数其他人。

最好的解决方法是确保“放入”的HTML尽可能干净。您可以使用HTMLTidy之类的常用工具来预处理文件。更好的是:不要尝试使“ RegEx匹配除XHTML自包含标签以外的其他打开标签”。(将引用的文本粘贴到任何浏览器搜索引擎中以获得乐趣。)一种更好的解决方案是使用HTML解析器,并简单地踢出您不喜欢的标签。如果您的HTML实际上是(正确形成的)XHTML,则也可以使用XSLT(通用的XML处理器语言)来完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式或不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

表达式不匹配正则表达式

来自分类Dev

为什么这个 python 正则表达式不匹配任何组?

来自分类Dev

为什么正则表达式不匹配这个字符串

来自分类Dev

这个正则表达式匹配什么?

来自分类Dev

什么正则表达式可以匹配这个?

来自分类Dev

javascript正则表达式如何匹配这个“和”“或”

来自分类Dev

匹配单词的正则表达式,或者不匹配

来自分类Dev

Python正则表达式搜索,匹配不匹配

来自分类Dev

完全匹配的正则表达式不部分匹配

来自分类Dev

正则表达式匹配不匹配的内容

来自分类Dev

正则表达式匹配任何字符或不匹配?

来自分类Dev

正则表达式匹配数字或不匹配

来自分类Dev

完全匹配的正则表达式不部分匹配

来自分类Dev

C ++正则表达式匹配,不匹配

来自分类Dev

正则表达式匹配(如果不...返回不...)

来自分类Dev

正则表达式与PHP中的正则表达式不匹配

来自分类Dev

正则表达式的正则表达式在Python中不匹配

来自分类Dev

正则表达式与PHP中的正则表达式不匹配

来自分类Dev

POSIX正则表达式不匹配

来自分类Dev

如何使正则表达式不匹配?

来自分类Dev

正则表达式不匹配新行

来自分类Dev

matchstr与vimscript中的正则表达式不匹配