嘿所以我现在对正则表达式不太好,试图学习,但是有人能够为我解释一点点吗?Perl正则表达式解释
if ($fileStrings[$stringCount] =~ m/((?:include|require)(?:_once)?\s*\(.*?\$.*?\);)/gi)
感谢
嘿所以我现在对正则表达式不太好,试图学习,但是有人能够为我解释一点点吗?Perl正则表达式解释
if ($fileStrings[$stringCount] =~ m/((?:include|require)(?:_once)?\s*\(.*?\$.*?\);)/gi)
感谢
m/((?:include|require)(?:_once)?\s*(.?\$.?);)/gi
m
匹配
/
模式定界符
(?:include|require)
的比赛,但不能捕捉 '包括' 或 '需要'
(?:_once)?
选择ionally匹配,但不能捕捉“_once”
\s*
0或多个空格或制表符,其他的“空白”字符
(.?\$.?)
0或任意字符
;
匹配分号
(...)
外括号的1 - 捕获整个事情
/
模式定界符
gi
全球性的,不区分大小写的搜索
为什么寻找0或更多的空间或标签? – noledgeispower 2011-04-21 03:28:16
其实'\ s'不仅仅是空格和标签。它匹配诸如* newline *,* carriage-return * * vertical-tab *之类的空白字符,以及所有Unicode空格字符。有关更多信息,请参见[perldoc perlrecharclass](http://perldoc.perl.org/perlrecharclass.html#Whitespace)。 – 2011-04-21 03:29:40
@noledgeispower:好吧,不要问我,我没有写,我只是解释它 – 2011-04-21 03:31:56
我通常会发现很容易地编写一个测试程序来检查我的想法。也许这将帮助你了解正则表达式是这样做的:
#! /usr/bin/env perl
use warnings;
use strict;
use feature qw(say);
for my $line (
'include_once F$G;',
'require_once F$G;',
'INCLUDE F$G;',
'include_once AF$G;',
'include_once F$G;',
) {
if ($line =~ m/((?:include|require)(?:_once)?\s*(.?\$.?);)/gi) {
say qq(Line = "$line");
say qq(\$1 = "$1");
say qq(\$2 = "$2"\n);
}
else {
say qq(Line = "$line");
say "No match!\n";
}
}
,输出是:
Line = "include_once F$G;"
$1 = "include_once F$G;"
$2 = "F$G"
Line = "require_once F$G;"
$1 = "require_once F$G;"
$2 = "F$G"
Line = "INCLUDE F$G;"
$1 = "INCLUDE F$G;"
$2 = "F$G"
Line = "include_once AF$G;"
No match!
Line = "include_once F$G;"
$1 = "include_once F$G;"
$2 = "F$G"
括号是用来捕捉正则表达式的部分是变量$1
,$2
,$3
等。?:
不允许括号捕捉该部分(因此,您有$2
而不是$4
与值)。但是,尽管有?:
,但外部圆括号仍可捕获整条线。
它看起来像g
参数在最后允许多行被捕获。但是,这在我的测试中不起作用。
请参阅[YAPE :: Regex :: Explain](http://search.cpan.org/~gsullivan/YAPE-Regex-Explain-4.01/Explain.pm) - 正则表达式的解释 – 2011-04-21 05:01:35