簡體   English   中英

使用Perl的regexp中的卷曲括號

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

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