你可以在你的正則表達式中使用一個簡單的交替進行拆分:
my @parts = split(/\s*,\s*|\s+and\s+/, $string1);
例如:
$ perl -we 'my $string1 = "Joe Smith, Jason Jones, Jane Doe and Jack Jones";print join("\n",split(/\s*,\s*|\s+and\s+/, $string1)),"\n"'
Joe Smith
Jason Jones
Jane Doe
Jack Jones
$ perl -we 'my $string2 = "Jane Doe and Joe Smith";print join("\n",split(/\s*,\s*|\s+and\s+/, $string2)),"\n"'
Jane Doe
Joe Smith
如果你還必須處理牛津大學ma(即「這個,那個,和其他的東西」),那麼你可以使用
my @parts = split(/\s*,\s*and\s+|\s*,\s*|\s+and\s+/, $string1);
例如:
$ perl -we 'my $s = "Joe Smith, Jason Jones, Jane Doe, and Jack Jones";print join("\n",split(/\s*,\s*and\s+|\s*,\s*|\s+and\s+/, $s)),"\n"'
Joe Smith
Jason Jones
Jane Doe
Jack Jones
$ perl -we 'my $s = "Joe Smith, Jason Jones, Jane Doe and Jack Jones";print join("\n",split(/\s*,\s*and\s+|\s*,\s*|\s+and\s+/, $s)),"\n"'
Joe Smith
Jason Jones
Jane Doe
Jack Jones
$ perl -we 'my $s = "Joe Smith and Jack Jones";print join("\n",split(/\s*,\s*and\s+|\s*,\s*|\s+and\s+/, $s)),"\n"'
Joe Smith
Jack Jones
感謝stackoverflowuser2010的注意這種情況。
你會希望\s*,\s*and\s+
之初保持交替的其他分支從分裂的逗號或「和」第一,this order appears to be guaranteed as well:
替代品都試過了,從左至右,所以找到整個表達式匹配的第一個替代方案,就是選擇的方法。
如何處理「Joe Smith,MD and Mary and Joe Smith」這樣的「姓名」? – tadmc
請注意,您不使用'@data [1]'而是'$ data [1]'。既然你只使用一個元素,它是一個標量。 –