< a href = ">
84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
$str = " < a href = 'baidu.com' > "; $a = preg_match_all('/<(\s*)a\\1href\\1=\\1(\'|")\S*\\2\\1>/', $str,$arr); p($arr);
请问我写的正则哪里错了?麻烦请指出错误,不用帮我写另一个新的正则
<(\s)a(\s)href(\s)=(\s)(\'|")\S(\'|")(\s)>这样就OK啦
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
主要是逻辑问题
\1表示引用第一个子表达式匹配到的值,并不是使用第一个子表达式的规则。具体到你的正则中:
//
如果第一个(\s*)匹配到了3个括号,那么你这个表达式会要求后面每个\1的地方都要匹配3个空格(多了少了都不行),而不是再次匹配(\s*)。我猜你这样写是想复用第一个子表达式吧?但是很遗憾这样是不行的,必须把每个\\1替换为(\s*)或(\s+)。
你的正则中\\2的用法倒是正确的,原因同上。
主要是逻辑问题
\1表示引用第一个子表达式匹配到的值,并不是使用第一个子表达式的规则。具体到你的正则中:
//
如果第一个(\s*)匹配到了3个括号,那么你这个表达式会要求后面每个\1的地方都要匹配3个空格(多了少了都不行),而不是再次匹配(\s*)。我猜你这样写是想复用第一个子表达式吧?但是很遗憾这样是不行的,必须把每个\\1替换为(\s*)或(\s+)。
你的正则中\\2的用法倒是正确的,原因同上。