Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Search_Replace - Fatal编程技术网

Regex 如何使用正则表达式搜索和替换html标记

Regex 如何使用正则表达式搜索和替换html标记,regex,search,replace,Regex,Search,Replace,我想用div和/div搜索并替换html标记p和/p 仅限内部区块报价。示例如下: <blockquote> <p>paragraph 1</p> </blockquote> <p>paragraph 1 outside blockquote</p> <blockquote> <p>paragraph 2</p> <p>paragraph 3</p

我想用div和/div搜索并替换html标记p和/p 仅限内部区块报价。示例如下:

<blockquote>
    <p>paragraph 1</p>
</blockquote>
<p>paragraph 1 outside blockquote</p>
<blockquote>
    <p>paragraph 2</p>
    <p>paragraph 3</p>
</blockquote>
<p>paragraph 2 outside blockquote</p>

问题是,重复“全部替换”命令后,blockquote外部的p标记也将更改。上面的正则表达式只能搜索和替换一个实例,我必须不断执行“replaceall”命令,直到所有的p都被替换。有没有办法自动重复正则表达式?(我使用Editpad Pro v.7.2.3)

这是许多方面的常见问题。正则表达式适用于很多事情,而解析平衡分隔符并不是其中之一


您需要了解文档对象模型和XPath。然后将HTML加载到DOM中,用XPath查找其节点,对其进行操作,然后将其写回。

搜索:

(<blockquote>(?:(?!</?blockquote).)*?)<p>(.*?)</p>((?:(?!</?blockquote).)*</blockquote>)
\1<div>\2</div>\3
<p>((?:(?!</?blockquote).)*?)</p>(?=(?:(?!</?blockquote).)*</blockquote>)
<div>\1</div>

((?:(?!当然,这里必须提到.:-)谢谢你的建议,但我希望我能在你的帮助下解决这个问题,看看regex有什么问题。谢谢你,fish,举个例子说明为什么Regexp在HTML方面有六种糟糕的方法。我可以想出无数的解决办法,以前我已经完全控制了轻量的regexped HTML。现代的XPath是我从Regexps构建的两种破解方法n、 还有,xpw,
>)(.*?)(p>
对于您希望点击的第一个
来说,哪个>是正确的?在第一个blockquote被更改后,然后是“blockquote外的第1段”下面它也将被更改,这就是问题所在。有一个Regexp功能,在一次替换后停止咀嚼。其他HTML编辑器允许您在某些标记内更改标记。主要问题是,它似乎可以工作很长时间time@Phlip你是什么意思?顺便说一句,我同意你的回答,但就文本编辑的范围而言r、 使用正则表达式可能更容易,即使它可能无法使用Mariano,我想知道是否有任何方法可以自动重复正则表达式?另一种方法在EditPad中工作。只需单击一次,前一个答案需要两次。我尝试添加更多块引号,只需单击一次!
<p>((?:(?!</?blockquote).)*?)</p>(?=(?:(?!</?blockquote).)*</blockquote>)
<div>\1</div>