我试图在下面拆分变量以获得之前的部分":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);
答案 0 :(得分:2)
如果您希望匹配运算符返回正则表达式的“捕获”部分,则需要在正则表达式中包含捕获括号。
捕获括号是( ... )
等括号。
方括号([ ... ]
)用于定义字符类。也就是说,它们的意思是“匹配两个括号中的任何一个字符”。它们不捕获文本。
您的第一个示例包括捕获括号 - 因此返回捕获的匹配项并将其存储在@name1
。
您的第二个示例包含一个字符类,没有捕获括号 - 因此不会返回任何匹配项并将其存储在@name2
中。