使用Perl查找字符串中第一个数字的索引

6

我将尝试查找数字0-9的第一次出现的索引。

假设:

 $myString = "ABDFSASF9fjdkasljfdkl1"

我希望找到数字 9 所在的位置。
我已经尝试过以下代码:
print index($myString,[0-9]);

并且:

print index($myString,\d);
3个回答

9

使用正则表达式位置信息

use strict;
use warnings;

my $myString = "ABDFSASF9fjdkasljfdkl1";

if ($myString =~ /\d/) {
    print $-[0];
}

输出:

8

2
谢谢!我猜索引不起作用是因为我尝试给它一个范围而不是子字符串? - Mr_Brightside1111
@ysth: /\d/a比/[0-9]/更好,因为它支持其他数字格式,如阿拉伯数字(最初称为印度数字):٠,١,٢,٣,٤,٥,٦,٧,٨,٩和印度数字:०(0),१(1),२(2)等。 - Ashraf Bashir
@AshrafBashir:不是的,/\d/可以匹配数字,而/\d/a与/[0-9]/相同。是的,只有/\d/支持其他数字;这就是问题所在。在大多数情况下,它并不是大多数人想要或期望的。 - ysth
在处理多种语言时,支持其他数字是非常必要的,这就是 /\d/ 的作用。 - Ashraf Bashir

0
你可以尝试以下的Perl代码:
use strict;
use warnings;

my $String = "ABDFSASF9fjdkasljfdkl11";

if($String =~ /(\d)/)
 {
     print "Prematch string of first number $1 is $`\n";
     print "Index of first number $1 is " . length($`);
    } 

0

你可以尝试这个:

perl -e '$string="ABDFSASF9fjdkasljfdkl1";@array=split(//,$string);for $i (0..$#array) {if($array[$i]=~/\d/){print $i;last;}}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接