Regex 在perl中将多个正则表达式替换为一个正则表达式
我可以在perl中将下面的正则表达式替换为一个正则表达式吗Regex 在perl中将多个正则表达式替换为一个正则表达式,regex,perl,replace,Regex,Perl,Replace,我可以在perl中将下面的正则表达式替换为一个正则表达式吗 message =~ s/<span>(.*?)<\/span>/<span>$1<\/span>/g; message =~ s/<em>(.*?)<\/em>/<em>$1<\/em>/g; message =~ s/<ul>(.*?)&l
message =~ s/<span>(.*?)<\/span>/<span>$1<\/span>/g;
message =~ s/<em>(.*?)<\/em>/<em>$1<\/em>/g;
message =~ s/<ul>(.*?)<\/ul>/<ul>$1<\/ul>/g;
message =~ s/<ol>(.*?)<\/ol>/<ol>$1<\/ol>/g;
message=~s/span(.*?)\/span/$1/g;
message=~s/em(.*)\/em/$1/g;
信息=~s/ul(.*?\/ul/$1/g;
message=~s/ol(.*?)\/ol/$1/g;
您可以这样做:
message =~ s#
<
(?<tag>span|em|ul|ol)
>
(.*?)
<
/
\k<tag>
>
#
<$+{tag}>
$2
</$+{tag}>
#xg;
message=~s#
(?跨度| em | ul | ol)
(.*?)
/
\k
#
$2
#xg;
您可以这样做:
message =~ s#
<
(?<tag>span|em|ul|ol)
>
(.*?)
<
/
\k<tag>
>
#
<$+{tag}>
$2
</$+{tag}>
#xg;
message=~s#
(?跨度| em | ul | ol)
(.*?)
/
\k
#
$2
#xg;
我不确定您是否需要捕获标签之间的内容。为什么不在标记名周围替换
和
message =~ s#<(/?(?:span|em|[uo]l))>#<$1>#g;
message=~s#(/?(?:span | em |[uo]l))#g;
我不确定您是否需要捕获标签之间的内容。为什么不在标记名周围替换
和
message =~ s#<(/?(?:span|em|[uo]l))>#<$1>#g;
message=~s#(/?(?:span | em |[uo]l))#g;
这是一个非常优雅的答案,但严格来说,它并不等同于此。比较encode_实体“foo”的结果。因为这个答案不会重复出现,所以输出将是
emfoo/em`.@amon。是的,这是个问题。嵌套标记在将HTML与Regex组合时总是会出现问题。是的,这是一个问题…任何嵌套标记的解决方案…我需要它来进行文本转换…@manu。使用适当的html解析器。正则表达式不是解析HTML的正确工具。这是一个非常优雅的答案,但严格来说它不是等价的。比较encode_实体“foo”的结果。因为这个答案不会重复出现,所以输出将是
emfoo/em`.@amon。是的,这是个问题。嵌套标记在将HTML与Regex组合时总是会出现问题。是的,这是一个问题…任何嵌套标记的解决方案…我需要它来进行文本转换…@manu。使用适当的html解析器。正则表达式不是解析HTML的正确工具。