假設你的意思是$string
而不是$subject
...
use strict;
use warnings;
use v5.10;
my $string = "Foo `FooBar` Bar";
my $pattern = '`(.*?)`';
my $replace = "<code/>$&</code>";
$string =~ s{$pattern}{$replace}im;
say $string;
這導致...
$ perl ~/tmp/test.plx
Use of uninitialized value $& in concatenation (.) or string at /Users/schwern/tmp/test.plx line 9.
Foo <code/></code> Bar
這裏有一些問題。首先,$&
表示最後一場比賽匹配的字符串。那將是`FooBar`
的全部。你只需要FooBar
這是捕獲parens。你可以通過$1
獲得。見Extracting Matches in the Perl Regex Tutorial。
其次是$&
和$1
是變量。如果你把它們放在雙引號中,例如$replace = "<code/>$&</code>"
那麼Perl會立即插值它們。這意味着$replace
是<code/></code>
。這是警告來自的地方。如果你想使用$1
它必須直接進入替換。
最後,在引用正則表達式時,最好使用qr{}
。這是特殊的正則表達式引用。它避免了各種引用問題。
把它放在一起......
use strict;
use warnings;
use v5.10;
my $string = "Foo `FooBar` Bar";
my $pattern = qr{`(.*?)`};
$string =~ s{$pattern}{<code/>$1</code>}im;
say $string;
心靈的斜線。 –
你的字符串在'$ string'中,但是你在'$ subject'上執行了///'。你能顯示你的實際代碼嗎?你能證明哪些是行不通的嗎? – Schwern
這是Markdown嗎?如果是這樣,請查看[Text :: Markdown](https://metacpan.org/pod/Text::Markdown)。 – ThisSuitIsBlackNot