反斜杠在这个正则表达式中意味着什么:if(!/ ^ \ s * Production \ / Injection Rates /);

时间:2015-01-08 21:38:16

标签: regex perl

我不明白这个正则表达式中的/是什么意思?

push(@hds,$_) if(!/^\s*Production\/Injection Rates/);

'\'在这个上下文中不是转义序列吗?这是什么意思?谢谢!

3 个答案:

答案 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 ...匹配字符串注入率