我在Perl正则表达式中有一个很长的替换字符串,我想将其分成多行。将长替换字符串拆分成多行的语法是什么?我尝试了以下操作,但没有成功(不忽略空格):
$var =~ s/(some)(thing)/A_very_long_string_with_many_characters_that_should_be_split_over_
multiple_lines_but_can't_be_for_whatever_reason._The_matching_groups_are_"$1"_and_"$2"/x;
我的正则表达式替换字符串比这个人为的例子交错得多,所以我不能仅仅将大的文字部分放入变量中。换句话说,以下内容对我来说没有帮助:
my $prefix = 'A_very_long_string_with_many_characters_that_should_be_split_over_' .
'multiple_lines_but_can\'t_be_for_whatever_reason._The_matching_groups_are_';
$var =~ s/(some)(thing)/$prefix"$1"_and_"$2"/;
有人知道一种将替换字符串分割成多行的方法吗?
答案 0 :(得分:6)
替换面是一个字符串,需要经过一些特定的修饰符。 /e
是一个独特的情况,当替换端被评估为代码时。但是,如果它是纯字符串,则它的求值方式不受(any?)修饰符的影响,并且肯定不受/x
的影响,因为空格在字符串中计数。
如果使用/e
,则可以根据需要在替换端编写代码,然后可以逐段形成替换字符串。
一种方法是使用sub来整齐地组织/e
下的替换字符串的构建
$var =~ s/(some)(thing)/build_repl($1, $2)/e;
sub build_repl {
my ($c1, $c2) = @_;
return
qq(A_very_long...) .
qq(The_matching...$c1...$c2);
}
答案 1 :(得分:3)
def book_not_found
end
运算符的替换组件不是正则表达式,并且不受s///
修饰符的影响。它是一个字符串,类似于用双引号引起来的字符串或反引号的内容。唯一的选择是将其构造为您所暗示的变量,或应用/x
修饰符,从而将替换项转换为perl表达式,您可以在其中构造字符串,但是您需要用引号将其引号严格禁止使用裸字字符串。
/e