簡體   English   中英

拆分字符串時在perl中轉義特殊字符

[英]escape special character in perl when splitting a string

我有這種格式的文件

string: string1
string: string2
string: string3

我想用space:分割線,所以最初我這樣寫:

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

結果不是預期的,因為在@arraysplit插入內容也留有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM