我有一个这种格式的文件
string: string1
string: string2
string: string3
我想按space
和:
拆分行,所以最初我写了这个:
my @array = split(/[:\s]/,$lineOfFile);
结果不符合预期,因为在@array
内split
也插入了white space
,所以经过一些研究我明白我必须逃避{{1}所以我写了
\s
为什么我必须逃避my @array = split(/[:\\s]/,$lineOfFile);
,角色\s
不是一个特殊角色?
提前感谢。
答案 0 :(得分:2)
您不需要双重转义\s
并且冒号不是具有特殊含义的字符。但是在你的情况下,完全避免使用一个字符类并拆分冒号后跟空格"一个或多个"次。
my @array = split(/:\s+/, $lineOfFile);
答案 1 :(得分:2)
你不必须加倍反斜杠。你试过吗?
split /[:\\s]/, $line
将分割为冒号:
或反斜杠\
或小S s
,给予
("", "tring", " ", "tring1")
这根本不是你想要的。我建议你拆分冒号后跟零或多个空格
my @fields = split /:\s*/, $line
给出了这个结果
("string", "string1")
我认为这就是你想要的。
答案 2 :(得分:1)
问题是,/[:\s]/
只搜索单个字符。因此,在应用此正则表达式时,您会得到类似
print $array[0], ' - ', $array[1], ' - ', $array[2];
string - - string1
因为它在:
和string1
之前的空格之间分割。因此,字符串string: string1
被分为三个部分string
,:
与空格和string1
之间的空位。但是,允许更多字符
my @array = split(/[:\s]+/,$lineOfFile);
效果很好,因为:
+空格用于拆分。
print $array[0], ' - ', $array[1];
string - string1