[英]escape special character in perl when splitting a string
我有这种格式的文件
string: string1
string: string2
string: string3
我想用space
和:
分割线,所以最初我这样写:
my @array = split(/[:\s]/,$lineOfFile);
结果不是预期的,因为在@array
内split
插入内容也留有white space
,因此经过一些研究,我了解到我必须转义\\s
所以我写了
my @array = split(/[:\\s]/,$lineOfFile);
为什么我必须转义\\s
字符:
不是特殊字符吗?
有人可以向我解释吗?
提前致谢。
您不需要两次转义\\s
,并且冒号不是特殊含义的字符。 但是,在您的情况下,避免完全使用字符类并在冒号后将空格分隔“一次或多次”是有意义的。
my @array = split(/:\s+/, $lineOfFile);
您不必加倍反斜杠。 你试过了吗?
split /[:\\s]/, $line
将分裂上的冒号:
或反斜杠\\
或小S s
,给
("", "tring", " ", "tring1")
这根本不是您想要的。 我建议您在冒号后再分割零个或多个空格
my @fields = split /:\s*/, $line
这给出了这个结果
("string", "string1")
我想这就是你想要的。
问题是, /[:\\s]/
仅搜索单个字符。 因此,当应用此正则表达式时,您会得到类似
print $array[0], ' - ', $array[1], ' - ', $array[2];
string - - string1
因为它在:
和string1
之前的空白之间分割。 因此,字符串string: string1
分为三部分, string
:
和之间的空白处,以及whitespace和string1
。 但是,允许更多字符
my @array = split(/[:\s]+/,$lineOfFile);
效果很好,因为:
+空格用于拆分。
print $array[0], ' - ', $array[1];
string - string1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.