Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何使用RegEx剥离div中的某些标记_Html_Regex - Fatal编程技术网

Html 如何使用RegEx剥离div中的某些标记

Html 如何使用RegEx剥离div中的某些标记,html,regex,Html,Regex,我有一些非常混乱的HTML,有几个标记我想去掉。有些已经关闭,有些还没有关闭。有时标记中会出现randon换行符。正如我所说,混乱 例如: <div class="post"> <span style="color: #007700">!</span> <span style="color: #0000BB">defineLOW1</span> <span style="color: #007700">$</span&

我有一些非常混乱的HTML,有几个
标记我想去掉。有些已经关闭,有些还没有关闭。有时标记中会出现randon换行符。正如我所说,混乱

例如:

<div class="post">
<span style="color: #007700">!</span>
<span style="color: #0000BB">defineLOW1</span>
<span style="color: #007700">$</span><span style="color: #0000BB">0
<br /></span><span style="color: #007700">!</span>
<span style="color: #0000BB">deinfeHIGH1</span><span style="color: #007700">$</span>
<span style="color: #0000BB">1
<br /></span>
<span style="color: #007700">!</span>
<span style="color: #0000BB">defineLOW2</span><span style="color: #007700">$</span><span style="color: #0000BB">2
<br /></span>
<span style="color: #007700">!</span>
<span style="color: #0000BB">deinfeHIGH2</span><span style="color: #007700">$</span><span style="color: #0000BB">3
</div>

!
定义1
$0

! deinfeHIGH1$ 1.
! 最低2美元
! deinfeHIGH2$3

我要寻找的是一种剥离类
post
的div中所有
标记的方法,因为我想在一堆静态HTML页面上运行脚本。

人们很快指出。这并不意味着你不能用正则表达式对HTML进行有用的操作。特别是在您的例子中,因为您的HTML格式不正确,而且您的任务非常简单,所以您可以使用正则表达式完成您想要的任务。不过,可能会有一些边缘情况,所以我建议您在真正清理完内容后,通过HTML验证程序运行HTML

可能导致很多问题的一件事是,如果您有嵌套的
元素。(我们不必担心嵌套的
元素,因为我们只是将它们全部删除。)这是正则表达式的一个普遍问题。如果使用此匹配:

<div class="post">[^]*</div>
最后一个
将不包括在您的匹配中,因为它将匹配开始的div,然后是它到达的第一个结束的
标记…实际上是内部div的一部分

因此,如果你继续这样做,你会遇到一个更复杂的问题,你必须实现一些更复杂的东西(比如一个真正的HTML解析器,因为你的HTML格式是错误的,它会变得复杂)

接下来,假设在
中没有嵌套其他的
。您的第一个正则表达式将匹配整个div:

<div .*\bclass="post".*>(.*)</div>
(*)
那会得到你想要的所有唱片。我不知道您使用的是什么语言或正则表达式的风格,但大多数都支持某种嵌套替换。您要做的是对第一个匹配组(div中的内容)进行第二次替换。这将是非常简单的。只需将
替换为单个空格或
。我建议替换为一些空格,因为否则您可能会遇到跨距相互对接的问题。这取决于你

一些注意事项:

  • 我写的这些都是区分大小写的。如果您有
    class=“Post”
    或类似的内容,则必须使其具有针对性

  • 我没有考虑额外的空格。所以这与
    不匹配。如果这是一个问题,那么很容易解决

  • 我没有考虑使用单引号。所以这与
    不匹配。同样,这很容易修复


如果您在编辑器中使用正则表达式,这将有点棘手,因为我所知道的任何编辑器都不允许您进行子替换。然而,在大多数编程语言中,这是可能的。如果您让我知道您正在使用什么来执行正则表达式,我可以让这个答案更完整。

[^]
无效:它会产生错误“empty character class”。不正确,波希米亚人<代码>[^]是一个空的否定字符类。这包括一切。您可能认为这与
相同,但您可能错了:
匹配除换行符以外的所有内容<代码>[^]匹配所有内容,包括换行符。所以这有点像一个“超级周期”。在OPs的例子中,我假设他的输入中会有换行符,他会想匹配这些换行符,所以
是不够的,因此
[^]
。我确切地知道它的用途,但它在ruby或java中不起作用(没有测试过其他人)。通用方法是一个包容性和排他性组的两面,例如
[\s\s]
。我希望它在任何地方都能起作用。它看起来真的很优雅。我提出这个问题的原因是,问题中的语境既没有标记也没有提及,所以我们只能猜测。
<div .*\bclass="post".*>(.*)</div>