在拆分字符串时转义perl中的特殊字符

时间:2014-11-09 17:01:00

标签: regex perl split

我有一个这种格式的文件

string: string1
string: string2
string: string3

我想按space:拆分行,所以最初我写了这个:

my @array = split(/[:\s]/,$lineOfFile);

结果不符合预期,因为在@arraysplit也插入了white space,所以经过一些研究我明白我必须逃避{{1}所以我写了

\s

为什么我必须逃避my @array = split(/[:\\s]/,$lineOfFile); ,角色\s不是一个特殊角色?

有人可以解释一下吗?

提前感谢。

3 个答案:

答案 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
相关问题