有人可以告诉我它准备匹配的是什么吗?
$exp = '/[\s]+col[\s]*=[\s]*"([^"]*)"/si';
答案 0 :(得分:3)
它似乎匹配 col="some value"
,同时对等号周围的空格非常宽容,不区分大小写,并且无论值是否为空。
另一方面,很奇怪s
修饰符在那里做了什么,因为没有.
元字符。
答案 1 :(得分:3)
如果添加/x
修饰符,则可以使用注释编写正则表达式。所以这里是一个冗长的文档版本(总是建议复杂的版本):
$exp = '/
[\s]+ # one or more spaces
col # col
[\s]* # zero or more spaces
= # =
[\s]* # spaces
" # "
([^"]*) # anything but " and zero or more of it
" # "
/six';
此外,您有时会看到[^<">]
代替[^"]
,以使此类正则表达式能够更好地抵御格式错误的HTML。
答案 2 :(得分:1)
我认为其他人已经给出了一个很好的答案。顺便说一句,如果这不适合 解析标记,然后你可以用类似的东西来增强字符串方面的功能 这个:
\s+ col \s* = \s* "( (?: \\. | [^\\"]+ )* )"
Perl'ish将是:
use strict;
use warnings;
my $regex = qr/
\s+ col \s* = \s* "( (?: \\. | [^\\"]+ )* )"
/sx;
my $string = q(
col = " this'' is \" a test\s,
of the emergency broadcast system,
alright .\". cool."
);
if ( $string =~ /$regex/ )
{
print "Passed val =\n $1\n";
}
__END__
Passed val =
this'' is \" a test\s,
of the emergency broadcast system,
alright .\". cool.