这个Perl系列是否毫无意义?S/^(\ d +)\ B/$ 1/SG

Bry*_*eld 8 regex perl

这行Perl真的能做什么吗?

$variable =~ s/^(\d+)\b/$1/sg;
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的是,$1或者$&可能会被重复使用,但紧随其后.

$variable =~ s/\D//sg;
Run Code Online (Sandbox Code Playgroud)

将这两条线放在一起,第一线是无意义和可拆卸的吗?它似乎会是,但我在这个旧程序中已多次看到它,并希望确定.

TLP*_*TLP 12

$variable =~ s/^(\d+)\b/$1/sg;
Run Code Online (Sandbox Code Playgroud)
  • ^开头的锚点使/g修饰符变得无用.
  • .字符串中缺少通配符会使/s修饰符无效,因为它.也可以使换行符匹配换行符.
  • 由于\b^是零宽度断言,以及捕获组之外的唯一事物,这种替换根本不会改变变量.

这个正则表达式唯一做的就是捕获数字$1,如果找到它们.

随后的正则表达式

$variable =~ s/\D//sg;
Run Code Online (Sandbox Code Playgroud)

将删除所有非数字,使变量只是一个长数字.如果想要分离第一部分(与第一个正则表达式匹配),唯一的方法是$1从第一个正则表达式访问.

但是,在这种情况下,第一个正则表达式可以更好地编写:

$variable =~ /^(\d+)\b/;
Run Code Online (Sandbox Code Playgroud)

如果应该使用捕获:

my ($num) = $variable =~ /^(\d+)\b/;
Run Code Online (Sandbox Code Playgroud)


Mik*_*kel 6

"污点模式"正在使用中吗?(使用-T选项调用脚本.)

也许它用于消毒(即解开)用户输入.