我必须删除两个分隔符之间的字符串,即From"123XabcX321"我想要"123321".对于一个简单的案例,我很好:
$_=<>;
s/X(.*)X//;
print;
Run Code Online (Sandbox Code Playgroud)
但是如果像"123XabcXasdfjXasdX321"这样输入中存在歧义,它会将第一个X与最后一个X匹配,我得到"123321",但我想要"123asdfj321".有没有办法指定与第一个有效可能的分隔符匹配的"急切"匹配而不是最后一个?
如果可以的话,避免使用非贪婪修饰符作为性能提示.使用它可能会导致"意外"结果,因为添加?
实际上不会阻止.*
匹配任何内容.例如,
$ perl -le'print for "XaXbXY" =~ /X(.*?)XY/;'
aXb
Run Code Online (Sandbox Code Playgroud)
为避免匹配X
,您可以使用以下内容:
s/X[^X]*X//g;
Run Code Online (Sandbox Code Playgroud)
如果X
确实是大于一个字符的东西,您可以使用以下内容:
s/X(?:(?!X).)*X//g;
Run Code Online (Sandbox Code Playgroud)