2012-08-24 3 views
0

내 질문이 똑같아 보인다. (duplicate) ... 하지만 예외적으로 "True/Valid"HTML, JavaScript 변수 또는 HTML 태그의 일부를 구문 분석하지 않으려 고한다. 예제 :"HTML을 정규식으로 구문 분석 할 수 없습니다. 왜"?

   <td width="10"></td> 
      <td ><div id="combo_rub" style="CURSOR:pointer"></div><input type="hidden" id="rech_cod_cat" name="rech_cod_cat" value="1"/></td> 
      <td ><div id="combo_typ" style="CURSOR:pointer"></div></td> 
      <td ><div id="combo_sou_typ" style="CURSOR:pointer"></div></td> 

      <script type="text/javascript"> 
      d_rech_cod_rub  = "101"; 
      d_rech_cod_typ  = "1"; 
      d_rech_cod_sou_typ = "1020121"; 

      //ComboBox sous_type 
      var z_sou_typ=new dhtmlXCombo("combo_sou_typ","rech_cod_sou_typ",160); 

은 그래서 난 내 코드 PHP에서 원하는 것은 (d_rech_cod_rub는, d_rech_cod_typd_rech_cod_sou_typ)는 자바 스크립트 부분에서,하지

... 당신이 볼 수있는 HTML에서 두 번째 시나리오는의 값을 검색하는 것입니다 :

<td><a href="AnnoncesImmobilier.asp?rech_cod_rub=101&amp;rech_cod_typ=1"> 
<font color="#2154eb">Location (6920)</font></a> </td></tr></table></td></tr> 
<tr><td><table width="100%" cellpadding="0" cellspacing="0"><tr> 
<td><a href="AnnoncesImmobilier.asp?rech_cod_rub=101&amp;rech_cod_typ=5"></td>  
여기에 내가 '101'값을 검색 할 필요가 동일

은 ...

마지막으로, 전체 이야기 : 나는 아주 자주 PHP의 컬 확장자를 사용하고는 내가 위의 예와 같은 내용으로 건너. .. 문제는 유효한 HTML로만 작동하기 때문에 ( http://simplehtmldom.sourceforge.net/) HTML 파서를 사용할 때입니다. 내 질문 : 거기에 값을 검색 할 수있는 해결책이 있습니다. 안정된 태도? 나 같은 케이스를 발견하면 무엇을하고 있니?

감사합니다.

편집 : 그래서 대부분의 답변에 따라,

+0

가능한 복제본 : http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php – Jocelyn

+0

더 관대 한 html 파서를 사용하십시오.브라우저가 HTML을 만났을 때 무엇을하고 있다고 생각합니까? – Esailija

+0

@Jocelyn : 나는 이미 내 질문에 중복 된 질문이 아니라 HTML 태그를 파싱하려하지 않고 텍스트의 일부분만을 사용한다고 말했다. –

답변

2

다음 정규 표현식에가 PHP에 대한 트릭을

d_rech_cod_[a-z_ ]*= "([0-9]*)"; 
rech_cod_rub=([0-9]*) 

확실하지 않음을하지만, 다음과 같은 코드를 사용하여 평가 할 수 있습니다 더 구체적인 대답에

preg_match($regex, $content, $matches); 
print($matches[1]); 
1

... REGX이 트릭을 사용하여 나는 그것이 하나의 정규 표현식으로 당신이 원하는 일을 할 수 있는지 여부 확인하지만, 정기적으로 하나 확실히 불가능 해요 변수 당 표현. 문자열을 파싱하려면 strpos 함수를 사용할 수도 있습니다. 여기서 두 번째 접근법이 더 효율적인 방법 일 것입니다.

2

당신이 원하는 모든 그것에 대해 단지 정규 표현식을 사용하는 것은 매우 쉬운 그 값 인 경우 : 첫 번째 캡처 그룹이 당신의 가치입니다

d_rech_cod_rub\s*=\s*"([0-9]+)"; 

가.

+0

모든 d_rech 변수에서 작동하게하려면 다른 캡처 그룹을 추가 할 수 있습니다 :'(d_rech_cod_ [a-z _] +) \ s * = \ s * "([0-9] +)"; – newts

2

을, 정규 표현식은 할 수 없습니다 중첩 된 정보를 다루십시오. 예를 들어

...

<span>Hello <span>World</span></span> 

돌아갑니다 <span>.*<\/span>를 찾는 정규 표현식 : 우리는 심지어 실종 태그 유효하지 않은 HTML을 처리하는 언급하지 않습니다

<span>Hello <span>World</span> 

.

같은 것을 this (loadHTML)과 같은 것으로 지정할 수 있습니다.

관련 문제