我正在制作一个BED文件,但我在拆分变量以获取个人ID方面遇到了问题。
以下是数据
fam_scz_uktr_eur_omni*UK1090_0_pca|PT-BHLS chr15 20301669 ...
这是我的脚本(我逃脱了!)
if( $id =~ m/\|/g){
@tempID = split "\|", $id;
$id = pop(@tempID);
}
...
unless($id =~ m/FID.IID/ || $id =~ m/arrayId/ || $id =~ m/sampleId/){
$orphan{$id}=$line;
}
这是孤儿哈希的输出
KEY VALUE
S fam_scz_uktr_eur_omni*UK1090_0_pca|PT-BHLS chr15 20301669 ....
它返回了最后一个角色。什么给了!?
我在这里遗漏了什么吗?任何帮助表示赞赏:D
答案 0 :(得分:4)
试试@tempID = split /\|/, $id;
。我认为报价引起了\ |只是被解释为管道字符,所以正则表达式引擎实际上只看到管道(即交替),而不是它被转义的事实。 (即它在空字符串或空字符串上匹配。)
(或者,您可以使用"\\|"
,但这似乎不必要地复杂化。)
答案 1 :(得分:1)
虽然你可以使用反斜杠转义,但大多数正则表达式特殊字符在字符类中使用时会失去意义。我发现这更具可读性,无论有多少级别的解释,它的含义都是一致的;对于用"
分隔的字符串,或者即使它在使用前传递给shell,也无需转义转义符。
此表达式使用以下字符类分割字符串:
@tempID = split ("[|]", $id);