如何在perl中拆分多个模式的字符串?

qui*_*kxi 13 regex string perl split

我想拆分一个包含多个模式的字符串:

恩.

my $string= "10:10:10, 12/1/2011";

my @string = split(/firstpattern/secondpattern/thirdpattern/, $string);

foreach(@string) {
    print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)

我希望得到一个输出:

10
10
10
12
 1
2011
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

ste*_*enl 33

使用正则表达式分隔符中的字符类来匹配一组可能的分隔符.

my $string= "10:10:10, 12/1/2011";
my @string = split /[:,\s\/]+/, $string;

foreach(@string) {
    print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)

说明

  • 斜线对/.../表示要匹配的正则表达式或模式.

  • 方括号对[...]表示正则表达式的字符类.

  • Inside是可以匹配的可能字符集:冒号:,逗号,,任何类型的空格字符\s和正斜杠\/(反斜杠作为转义字符).

  • 的+需要,以匹配于1个或多个的前一个字符,这是在此情况下,整个字符类的.如果没有这个,逗号空间将被视为2个单独的分隔符,在结果中为您提供一个额外的空字符串.


ike*_*ami 5

错误的工具!

my $string = "10:10:10, 12/1/2011";
my @fields = $string =~ /([0-9]+)/g;
Run Code Online (Sandbox Code Playgroud)