我使用的代码如下,
代码:
my $str = 123455;
if ($str =~ m/([a-z]+)|(\d+)/ {
print "$1\n";
}
我知道它不会打印结果,因为我们应该给2美元。但我希望得到结果,因为它通过更改正则表达式使用相同的代码。
有可能吗?
注意:
请不要提供如下结果,
my $str = 123455;
if ($str =~ m/(?:[a-z]+)|(\d+)/ {
print "$1\n";
}
答案 0 :(得分:3)
您可以将(?| .. )
用于alternative capture group numbering,
use 5.010; # regex feature available since perl 5.10
my $str = 123455;
if ($str =~ m/(?| ([a-z]+)|(\d+) )/x) {
print "$1\n";
}
答案 1 :(得分:1)
([a-z]+|\d+)
试试这个。$1
。见。演示。
http://regex101.com/r/sZ2wJ5/1
如果您想一次只匹配字母或数字,请添加锚点。
^([a-z]+|\d+)$
或
((?:[a-z]+)|(?:\d+))
答案 2 :(得分:0)
您可以使用print "$&\n"
。
$& 包含整个匹配的字符串(换句话说:$ 1或$ 2)。
有关详细信息,请参阅http://perldoc.perl.org/perlre.html; - )
答案 3 :(得分:0)
你是什么意思,你不想改变你的团队结构?您希望您的捕获转到第1组,但您已经赢得了未在第1组中添加数字的内容。您 可以更改您的组结构。
如果您仍希望能够在组2中找到数字,则可以创建子组 - 从左括号开始的组编号。试试
([a-z]+|(\d+))
如果这就是你想要的。