2015-01-15 23 views
2

我正在使用PHP preg_match在頁面上查找和解析特定表單。直到現在,我的代碼運行良好,但我發現一些不需要的表單現在包含我實際需要的單詞,因此這些不需要的表單也會被解析。簡而言之,我需要解析所有包含單詞「findme」的表單,而不是在URL中包含單詞「ignoreme」。preg_match - 找到包含單詞A而不是B的表單

這裏是我的preg_match:

<form action=("|\'?)([0-9a-zA-Z:\/\._~\-\?=]+)findme(.*?)\/form> 

不幸的是,如果表單URL是像/ SOME_URL/ignoreme/findme /不管,該代碼仍然解析它,我不想要的。我應該如何修改代碼?

+1

是屬性還是文本內的兩個單詞?或者始終在action屬性中? (對於信息正則表達式是不是要走的路,使用DOMXPath更容易) – 2015-01-15 16:18:59

+0

我只需要解析包含此單詞在「動作」屬性中的表單 – 2015-01-15 16:25:55

回答

0
$dom = new DOMDocument; 
$dom->loadHTML($yourHTML); 

$xpath = new DOMXPath($dom); 

$formNodeList = $xpath->query('//form[contains(@action, "findme") and not(contains(@action, "ignoreme"))]'); 

foreach($formNodeList as $formNode) { 
    // do what you want with the DOMNode (see php manual) 
} 
+0

代碼給出此錯誤: 警告:DOMXPath :: query():無效的謂詞 警告:DOMXPath :: query():無效的表達式 錯誤在這一行的某處 - $ formNodeList = ... – 2015-01-15 16:37:54

+0

@MindaugasLi:實際上,它已被更正。 – 2015-01-15 16:44:08

相關問題