$str = "<a href='http://www.baidu.com/index.php?id=1&name=user'></a> < a href = 'baidu.com' > </a>"; $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年軟件開發(fā)和IT教學經驗。曾任多家上市公司技術總監(jiān)、架構師、項目經理、高級軟件工程師等職務。 網(wǎng)絡人氣名人講師,...
主要是邏輯問題
\1表示引用第一個子表達式匹配到的值,并不是使用第一個子表達式的規(guī)則。具體到你的正則中:
//
如果第一個(\s*)匹配到了3個括號,那么你這個表達式會要求后面每個\1的地方都要匹配3個空格(多了少了都不行),而不是再次匹配(\s*)。我猜你這樣寫是想復用第一個子表達式吧?但是很遺憾這樣是不行的,必須把每個\\1替換為(\s*)或(\s+)。
你的正則中\(zhòng)\2的用法倒是正確的,原因同上。