使用/ [,] /和/(|)/匹配模式以在Perl中拆分时有什么区别?

时间:2017-12-07 09:16:55

标签: regex perl split

我试图在下面拆分变量以获得之前的部分":2 |"。为什么模式匹配才能在变量@name1中起作用,而不是@name2

$a = "NB501373:45:HFH3CBGXY:4:11401:17564:1786:2|DS-R2Dec3|Dor|23-12-2013|0m|GFF";

@name1 = split (/(\:1\|DS\-|\:2\|DS\-)/, $a);
@name2 = split (/[\:1\|DS\-,\:2\|DS\-]/, $a);

1 个答案:

答案 0 :(得分:2)

如果您希望匹配运算符返回正则表达式的“捕获”部分,则需要在正则表达式中包含捕获括号。

捕获括号是( ... )等括号。

方括号([ ... ])用于定义字符类。也就是说,它们的意思是“匹配两个括号中的任何一个字符”。它们不捕获文本。

您的第一个示例包括捕获括号 - 因此返回捕获的匹配项并将其存储在@name1

您的第二个示例包含一个字符类,没有捕获括号 - 因此不会返回任何匹配项并将其存储在@name2中。