带有非捕获组的 Perl 替换正则表达式
Perl Substitution regexp with non capturing group
我在 $text
中存储了以下内容:
<h1>Bonjour tout le monde (diverses langues) !</h1>
<h2>Anglais</h2>
Hello World!
<quote>Every first computer program starts out "Hello World!".</quote>
<h2>Espagnol</h2>
¡Hola mundo!
<image=http://example.com/IMG/jpg/person.jpg>
我想插入一些
<p>...</p>
段落周围的标签尚未包含在标签中。
我试过了
$text =~ s/(?:<.*>)*(.*)/<p><\/p>/g;
但是替换并没有保留我的非捕获组。它会产生这个:
<p>
</p><p>
Hello World!
</p><p>
</p><p>
¡Hola mundo!
</p><p>
</p><p></p>
有什么想法吗?
谢谢。
或许尝试使用一种模式,该模式只查找不以 < >
开头或结尾的行。还建议包括 \n
,因为您不希望每一行只包含一个换行符来获得 <p></p>
标签:
$text =~ s/(^[^<\n]+.+|.+[^\/\n>]+$)/<p><\/p>/gm;
示例:
s/// 替换它匹配的内容。
您可以使用
$text =~ s/((?:<.*>)*)(.*)/<p><\/p>/g;
前瞻或后瞻匹配的文本不被视为匹配的一部分。在遇到 \K
之前,文本也不匹配。
$text =~ s/(?:<.*>)*\K(.*)/<p><\/p>/g;
第二种解决方案需要 Perl 5.10+。
我在 $text
中存储了以下内容:
<h1>Bonjour tout le monde (diverses langues) !</h1>
<h2>Anglais</h2>
Hello World!
<quote>Every first computer program starts out "Hello World!".</quote>
<h2>Espagnol</h2>
¡Hola mundo!
<image=http://example.com/IMG/jpg/person.jpg>
我想插入一些
<p>...</p>
段落周围的标签尚未包含在标签中。
我试过了
$text =~ s/(?:<.*>)*(.*)/<p><\/p>/g;
但是替换并没有保留我的非捕获组。它会产生这个:
<p>
</p><p>
Hello World!
</p><p>
</p><p>
¡Hola mundo!
</p><p>
</p><p></p>
有什么想法吗?
谢谢。
或许尝试使用一种模式,该模式只查找不以 < >
开头或结尾的行。还建议包括 \n
,因为您不希望每一行只包含一个换行符来获得 <p></p>
标签:
$text =~ s/(^[^<\n]+.+|.+[^\/\n>]+$)/<p><\/p>/gm;
示例:
s/// 替换它匹配的内容。
您可以使用
$text =~ s/((?:<.*>)*)(.*)/<p><\/p>/g;
前瞻或后瞻匹配的文本不被视为匹配的一部分。在遇到 \K
之前,文本也不匹配。
$text =~ s/(?:<.*>)*\K(.*)/<p><\/p>/g;
第二种解决方案需要 Perl 5.10+。