2015-01-15 2 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를 사용하여 이동하는 것은 쉽지 않습니다.) –

+0

"동작"특성에서이 단어를 포함하는 폼만 구문 분석해야합니다. –

답변

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 = ... –

+0

@MindaugasLi : 실제로 문제가 해결되었습니다. –

관련 문제