Regexp正在使用RegExr(http://gskinner.com/RegExr/)而不是PHP preg_match

时间:2011-11-11 18:16:21

标签: php regex string

我这里有一个正则表达式,必须匹配html锚标记并从字符串中提取它们。

<a(.*)href=[\'A-Za-z0-9\"@?+:\-_.\/]+( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]+( *)>( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]*( *)</( *)a>

它适用于RegExr(http://gskinner.com/RegExr/),但当我尝试使用preg_match_all()时 喜欢这个:

preg_match_all('#<a(.*)href=[\'A-Za-z0-9\"@?+:\-_.\/]+( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]+( *)>( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]*( *)</( *)a>#i',$string,$matches);

它返回空数组。即没有结果:(

欢迎任何帮助和纠正。

1 个答案:

答案 0 :(得分:1)

您的第一个问题是,您没有向preg_match_all提供与RegExr相同的正则表达式。

在PHP的单引号字符串文字中,\在另一个\'之前被特别处理。在这两种情况下,\是一个前缀转义符,可以将\'插入到字符串中。

因此,无论您在正则表达式中有\',都必须在单引号字符串文字中使用\\\',以便它们获得传递给preg_match_all

例如,如果您有\',则必须使用\\\'