只是试图让我的头围绕regexps。以下是代码的一部分。它逐行读取文件,它具有以下表达式,以便在任一端触发空白行。
\ A 匹配行的开头
\ s + 一个或多个空格
\ z 匹配行尾
while (<$fh>)
{
s{\A\s+}{};
s{\s+\z}{};
}
我正在努力的部分是大括号。我能找到的唯一文件表明它们可以作为乘数。 我读了 s {\ A \ s +} {}; 如果行的开头和空格都没有替换,但这是我的猜测。我希望确认这个以及这个正则表达式中花括号的含义
答案 0 :(得分:6)
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//
答案 1 :(得分:2)
{}
指的是一对分隔符。
您可能需要参考Quote and Quote-like Operators。
Customary Generic Meaning Interpolates
s{}{} Substitution yes*
举个例子:
$ echo foo 42 bar | perl -pe 's{42}{84}'
foo 84 bar