帮助正则表达式

时间:2011-07-15 09:12:32

标签: regex perl

在以下表达式中:

if (($$_ =~ /^.+:\s*\#\s*abcd\s+XYZ/)
  1. $$ _取自哪里?
  2. 表达式的右侧表示匹配一个或多个字符加后跟冒号,后跟零或多个空格后跟#后跟一个或多个空格,后跟'abcd'后跟零或多个空格后跟' XYZ'?

4 个答案:

答案 0 :(得分:2)

你有最后一个“一个或多个”和“零个或多个”与正则表达式实际上相反的方式。

$$_取消引用$_中的标量引用。

答案 1 :(得分:1)

关于2.,你对正则表达式的解释并不完全正确。

/^.+:\s*#\s*abcd\s+XYZ/

表示一个或多个字符(从字符串的开头开始)后跟冒号,后跟零个或多个空格字符,后跟一个哈希字符,后跟零个或多个空格字符,后跟'abcd',后跟一个或多个空格字符,后跟'XYZ'。

答案 2 :(得分:1)

至于pt。 2:

以(^)开头的一行或多行(.+),冒号(:),零个或多个空白字符(\s*),一个哈希( \#),零个或多个空白字符(\s*),字符串“abcd”(abcd),一个或多个空白字符(\s+),然后是字符串“XYZ”(XYZ)。

(强调增加了差异。)请注意,行尾($)没有锚点,因此这仅涉及开头。

答案 3 :(得分:0)

查看this site

以下是你的正则表达式的给出解释:

Token    Meaning

^        Matches beginning of input. If the multiline flag is set to true, 
         also matches immediately after a line break character.
.+       Matches any single character except newline characters.
         The + quantifier causes this item to be matched 1 or more times (greedy).
:        :
\s*      Matches a single white space character.
         The * quantifier causes this item to be matched 0 or more times (greedy).
\#       #
\s*      Matches a single white space character.
         The * quantifier causes this item to be matched 0 or more times (greedy).
abcd     abcd
\s+      Matches a single white space character.
         The + quantifier causes this item to be matched 1 or more times (greedy).
XYZ      XYZ