[英]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.