Perl Regex替代段落标记

时间:2015-04-22 21:44:14

标签: regex perl expression

我正在尝试使用正则表达式替换paragragh标签内的内容,其中包含内容,后跟br br标签

 s/^[<]p[>](.+)[<][/]p[>]/\1[<]br[>][<]br[>]/

我收到的错误不匹配[在正则表达式中标记为&lt; --- HERE m / ^ [&lt;] p&gt; [&lt;] [

我尝试将[/]更改为反斜杠/但我不确定如何解决这个问题。谢谢=]

我实际上得到了它

s/^<p>(.+)<\/p>/\1<br><br>/;

2 个答案:

答案 0 :(得分:1)

试试这个:

s#(?=</p>)#<br><br>#

每当处理/时,我都喜欢使用另一个分隔符。我在这里使用#

因为,您只想追加<br><br>而不是触及<p>..</p>中的任何其他内容,我们可以使用前瞻锚点。这就是(?=...)的作用。它会查找一个点,之后会有一个</p>并用替换字符串替换它。

请注意,环视表达式为零宽度,即它们与任何字符都不匹配。

答案 1 :(得分:0)

您可以使用此版本的正则表达式:

s/<p>(.+?)<\/p>/\1<br><br>/si

我删除了字符串开始锚^,很有可能你不需要它。 .+?会确保您匹配最匹配的</p>si选项会启用不区分大小写的匹配,.也会匹配换行符号。