[英]Curly brackets in regexps with Perl
只是試圖讓我的頭圍繞regexps。 以下是代碼的一部分。 它逐行讀取文件,它具有以下表達式,以便在任一端觸發空白行。
\\匹配行的開頭
\\ s +一個或多個空格
\\ z匹配行尾
while (<$fh>)
{
s{\A\s+}{};
s{\s+\z}{};
}
我正在努力的部分是大括號。 我能找到的唯一文件表明它們可以作為乘數。 我讀了s {\\ A \\ s +} {}; 如果開始行和白色空格替換為空,但這是我的猜測。 我希望確認這個以及大括號在此正則表達式中的含義
devnull已經給出了正確答案,但我覺得還有更多要補充而不是評論。
s{}{}
只是s///
替換運算符,但與不同的分隔符一起使用。 您可以使用幾乎任何字符作為分隔符,包括不同類型的平衡括號,例如s#foo#bar#
, s[foo][bar]
。
您可以使用它來避免在匹配的字符串中轉義分隔符。 比如匹配路徑時:
s#/foo/bar/baz#/foo/baz/bax#
使用默認的斜杠分隔符/
看起來比等效的更好:
s/\/foo\/bar\/baz/\/foo\/baz\/bax/
老實說,這很令人困惑。
在你的情況下,沒有真正的理由使用不同的分隔符,所以我認為替換最好用原始分隔符編寫:
s/\A\s+//
s/\s+\z//
{}
指的是一對分隔符。
您可能想要引用Quote和Quote-like Operators 。
Customary Generic Meaning Interpolates
s{}{} Substitution yes*
舉個例子:
$ echo foo 42 bar | perl -pe 's{42}{84}'
foo 84 bar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.