Perl 在多行上拆分长替换正则表达式
Perl Split Long Substitution Regex Over Multiple Lines
我在 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_""_and_""/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""_and_""/;
有谁知道将替换字符串拆分成多行的方法吗?
s///
运算符的替换组件不是正则表达式,不受 /x
修饰符的影响。它是一个字符串,类似于双引号字符串或反引号的内容。您唯一的选择是像您提到的那样在变量中构造它,或者应用 /e
修饰符,它将替换转换为 perl 表达式,您可以在其中构造字符串,但您需要引用这些部分,因为strict 不允许裸字字符串。
use strict;
use warnings;
$var =~ s/(some)(thing)/'A_very_long_string_with_many_characters_that_should_be_split_over_' .
qq{multiple_lines_but_can't_be_for_whatever_reason._The_matching_groups_are_""_and_""}/e;
替换端是一个字符串,受一些特定修饰符的影响。一个不同的情况是 /e
,当替换端被评估为代码时。但是,如果它是一个普通字符串,那么它的计算方式不受(任何?)修饰符的影响,而且肯定不会受到 /x
的影响,因为空格在字符串中计数。
如果您使用/e
,那么您可以根据需要在替换端编写代码,然后您可以逐段构建您的替换字符串。
一种方法是使用 sub 来整齐地组织 /e
下替换字符串的构建
$var =~ s/(some)(thing)/build_repl(, )/e;
sub build_repl {
my ($c1, $c2) = @_;
return
qq(A_very_long...) .
qq(The_matching...$c1...$c2);
}
我在 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_""_and_""/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""_and_""/;
有谁知道将替换字符串拆分成多行的方法吗?
s///
运算符的替换组件不是正则表达式,不受 /x
修饰符的影响。它是一个字符串,类似于双引号字符串或反引号的内容。您唯一的选择是像您提到的那样在变量中构造它,或者应用 /e
修饰符,它将替换转换为 perl 表达式,您可以在其中构造字符串,但您需要引用这些部分,因为strict 不允许裸字字符串。
use strict;
use warnings;
$var =~ s/(some)(thing)/'A_very_long_string_with_many_characters_that_should_be_split_over_' .
qq{multiple_lines_but_can't_be_for_whatever_reason._The_matching_groups_are_""_and_""}/e;
替换端是一个字符串,受一些特定修饰符的影响。一个不同的情况是 /e
,当替换端被评估为代码时。但是,如果它是一个普通字符串,那么它的计算方式不受(任何?)修饰符的影响,而且肯定不会受到 /x
的影响,因为空格在字符串中计数。
如果您使用/e
,那么您可以根据需要在替换端编写代码,然后您可以逐段构建您的替换字符串。
一种方法是使用 sub 来整齐地组织 /e
$var =~ s/(some)(thing)/build_repl(, )/e;
sub build_repl {
my ($c1, $c2) = @_;
return
qq(A_very_long...) .
qq(The_matching...$c1...$c2);
}