【问题标题】:Simple perl regex replacement简单的 perl 正则表达式替换
【发布时间】:2016-12-01 13:41:30
【问题描述】:

这是我的 perl 代码:

my $var="[url=/jobs/]click here[/url]";
$var =~ /\[url=(.+?)\](.+?)\[\/url\]/<a href="\1" style="text-decoration:none;color:#336699">\2</a>/g

我对 perl 很陌生,所以我知道它不正确,但我如何正确执行 regex replacement

最终结果是将$var 转换为&lt;a href="/jobs"&gt;click here&lt;/a&gt;

【问题讨论】:

  • 我不明白您是如何错过替代表格的。只有 1 并且你有 %99 并且似乎知道正则表达式。您从哪里获得现有信息? use strict; use warnings 应该告诉你一些事情。
  • @zdim 感谢您的提醒。你的回答很好,但我认为之后的答案更好。如果你不同意,请告诉我原因,我会考虑换成你。
  • @jkushner 太好了,感谢您的照顾。我确实不是的意思是问我的答案——只是为了标记一些东西!谢谢你:)

标签: regex perl


【解决方案1】:

所以,你知道的所有答案都是s///

但是,对于这么大的东西,你应该把它分成几部分
使其更易于维护。并且还有助于摆脱
分隔符地狱的泥潭。

这使用了一个预编译的正则表达式和一个用 s///e 调用的回调函数

use strict;
use warnings;

# Pre-compiled regex
my $rx = qr{\[url=(.+?)\](.+?)\[/url\]};

# Callback
sub MakeAnchor {
   my ($href,$text) = @_;
   return '<a href="' . $href . '" style="text-decoration:none;color:#336699">' . $text . '</a>';
}

my $input = '[url=/jobs/]click here[/url]';
$input =~ s/$rx/MakeAnchor($1,$2)/eg;

print $input;

输出

&lt;a href="/jobs/" style="text-decoration:none;color:#336699"&gt;click here&lt;/a&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多