Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
Regex 正则表达式HTML嵌套引号替换_Regex - Fatal编程技术网

Regex 正则表达式HTML嵌套引号替换

Regex 正则表达式HTML嵌套引号替换,regex,Regex,我在HTML中有多个嵌套引号,如下所示: <div class="quote-container"> <div class="quote-block"> <div class="quote-container"> <div class="quote-block"> </div> </div> <div class="quote-contain

我在HTML中有多个嵌套引号,如下所示:

<div class="quote-container">
   <div class="quote-block">
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
   </div>
</div>
<div class="quote-container">.*<div class="quote-block">.*(?!<div).*</div>.*</div>
我需要搜索并删除引号。我使用的表达方式是:

<div class="quote-container">.*<div class="quote-block">.*</div>.*</div>
这适用于单引号。但是,上面的多嵌套引号示例存在一个问题

我的任务是搜索:

<div class="quote-container">.*<div class="quote-block">
加上任何不包含

<div

.*</div>.*</div>
我尝试了如下的lookback和lookahead断言:

<div class="quote-container">
   <div class="quote-block">
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
      <div class="quote-container">
         <div class="quote-block">
         </div>
      </div>
   </div>
</div>
<div class="quote-container">.*<div class="quote-block">.*(?!<div).*</div>.*</div>
但它们不起作用

有办法完成我的任务吗?我需要一个perl表达式,我可以在TextPipe中使用,我将它用于论坛解析,然后我进行文本到语音的转换


提前谢谢。

我想你的问题是你在使用表达式。*


尝试用非贪婪的。*替换所有。*?

我个人会通过替换掉引号来解决这个问题,直到不再有任何引号可以替换掉。在一次正则表达式替换中确实无法处理此问题,您需要做的是:

psuedo代码:

html="... from your post ...";
do{
 newhtml=html
 newhtml=replace(
        '/<div class="quote-container">.*<div class="quote-block">.*</div>.*</div>/s',
        '',
        newhtml
    )
} while(newhtml!=html)
html=newhtml

这将处理所有形式的嵌套引号。

正则表达式是处理嵌套结构的糟糕选择。我会为这个问题编写一个特定的解析器,一个简单的基于堆栈的解析器就足够了。

我不使用贪婪表达式。它们在我的程序选项中被禁用。我试过了,但你没发。不管怎么说,你的正则表达式肯定不会和贪婪一起工作。你说有问题,但不是问题是什么。您应该发布示例中所需的输出。将引号替换掉,直到不再有任何引号,也会吃掉post消息,因为它们位于引号之间。此外,我需要一个正则表达式,而不是那样的代码。无论如何,谢谢你。