我这里有一个正则表达式,必须匹配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);
它返回空数组。即没有结果:(
欢迎任何帮助和纠正。
答案 0 :(得分:1)
您的第一个问题是,您没有向preg_match_all
提供与RegExr
相同的正则表达式。
在PHP的单引号字符串文字中,\
在另一个\
或'
之前被特别处理。在这两种情况下,\
是一个前缀转义符,可以将\
或'
插入到字符串中。
因此,无论您在正则表达式中有\
或'
,都必须在单引号字符串文字中使用\\
和\'
,以便它们获得传递给preg_match_all
。
例如,如果您有\'
,则必须使用\\\'
。