这个正则表达式意味着什么?

时间:2010-12-30 20:58:03

标签: php regex

有人可以告诉我它准备匹配的是什么吗?

$exp = '/[\s]+col[\s]*=[\s]*"([^"]*)"/si';

3 个答案:

答案 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.