2013-07-03 2 views
1

웹 사이트에서 새 책을 얻을 수있는 스크립트를 만들려고합니다.두 개의 서로 다른 태그 사이에서 캡쳐 할 정규식과 숫자

저는 preg_match_all을 사용하고 있습니다. 얻을 수있는 7 가지 정보가 있습니다. 제목, 저자, 편집자 ...

내 preg 매치 마스크를 만드는 데 문제가 있습니다. 예를 들어 여기에서 제품 코드가 필요합니다. 각 페이지에는 3 ~ 10 개의 코드 제품이 있습니다. : 그것은 작업의

$mask ="/Réf :(.*)<\/li>/Us"; 

,하지만 난 단지 숫자를 원하는 : 처음에는

<li><label>Réf : </label>21608</li> 

나는이 노력하고있어. 나는 정규식 가이드를 웹상에서 검색하고 있지만이 코드 제품은 두 태그 (예 : <open>...</open>) 사이에 있지 않으므로 내 목표에 구문을 사용하는 방법을 이해하지 못한다. 이 코드 제품에는 4 또는 5 개의 숫자가 있습니다.

도움 주셔서 감사합니다.

+0

당신이 XML/HTML을 구문 분석하려는 경우, 그것은 거의 항상 실제 파서를 사용하는 더 나은 아이디어, 오히려입니다 regex를 사용하는 것보다. –

+0

참고 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

답변

0

의 그 자리에 맞게 단계적으로 해보자 :

  1. 우리는 Réf이,의는 /réf/i을하고 대소 문자를 구분하지 일치하도록 i 수정을 사용하자.
  2. space : space이,의는 동적으로 만들 수 있도록하고 /réf\s*:\s*/i
  3. 우리는 그 다음 우리가 자리를 제외한 모든 일치하는 \D*을 사용할 수 있습니다 전혀 자리가없는 공백 0 번 이상 일치하는 \s*과 일치 : /réf\s*:\s*\D*/i
  4. 우리는 우리가하는 4 ~ 5 번 숫자와 일치합니다 \d{4,5}를 사용합니다, 4 ~ 5 자리가 있다는 것을 알고 우리는 숫자를 필요 /réf\s*:\s*\D*\d{4,5}/i
  5. 을, 그래서 그룹으로 넣어 보자 : /réf\s*:\s*\D*(\d{4,5})/i

PHP 코드

$string = '<li><label>Réf : </label>21608</li>'; 
preg_match_all('/réf\s*:\s*\D*(\d{4,5})/i', $string, $m); 
print_r($m[1]); 

출력

Array 
(
    [0] => 21608 
) 
+1

감사합니다. 지금은 undestand입니다.이것은 매우 분명합니다. –

+0

@FlorentDelage 권자 너는 완전히 잊어 버렸지 만. 어쨌든 도움이 되었으면 좋겠습니다. 답변을 [수락] (http://meta.stackexchange.com/a/5235/)하는 것을 잊지 마세요! – HamZa

1

보십시오 다음과 같은 정규 표현식 :

/Réf :\D*(\d+)<\/li>/ 
  • \D : 숫자가 아닌
  • \d : 자리
0

이 시도 ...

/>\s*(\d{3,10})\s*</ 
관련 문제