我不明白这个正则表达式中的/是什么意思?
push(@hds,$_) if(!/^\s*Production\/Injection Rates/);
'\'在这个上下文中不是转义序列吗?这是什么意思?谢谢!
答案 0 :(得分:7)
是的,\
是the escape character in Perl regexes和其他地方。它从某些字符中删除了特殊含义,并与其他字符一起添加了\s
等特殊含义。
由于正则表达式选择使用/
作为分隔符,因此必须对正则表达式中的任何使用进行转义。它很难阅读,被称为Leaning Toothpick Syndrome。你可以通过choosing a different delimiter避免这种情况(并摆脱冗余的parens)。像{}
或[]
这样的平衡分隔符更容易阅读,避免了许多逃避问题。
push(@hds,$_) if !m{^\s*Production/Injection Rates};
答案 1 :(得分:3)
\
说要忽略它后面的斜线的粗斜。如果你之前没有反斜杠,Perl会认为“注入”之前的斜线是模式的结束。
你可以改写
/^\s*Production\/Injection Rates/
作为
m{^\s*Production/Injection Rates}
其中m
表示“匹配”,{
和}
是分隔符。您还可以使用任何其他标点符号,如下所示:
m#^\s*Production\/Injection Rates#
答案 2 :(得分:2)
这是做什么的:
if(!/^\s*Production\/Injection Rates/)
if()是正常的if语句
!......如果陈述不正确,请继续
/ something / ...将字符串视为正则表达式。
正则表达式本身^\s*Production\/Injection Rates
开始:
^
...断言,位置位于字符串的开头。
\s*
...在零和无限时间之间匹配空白字符,尽可能多次
Production
...匹配字符串生产
\/
...匹配字符/
Injection Rates
...匹配字符串注入率