2011-05-16 4 views
8

한정 기호를 사용하는 정규식에서 여러 캡처 그룹을 가져 오는 방법이 있습니까?수량 한정자를 사용하는 여러 regex 캡처 그룹

(?:<td>(.+?)<\/td>\s*){4} 

내가 하나와 끝까지 :이 같은 정규식을 작성하는 경우, 지금

<td>Data 1</td> 
<td>data 2</td> 
<td>data 3</td> 
<td>data 4</td> 

예를 들어, 나는이 (가 다루는 내가 무슨에서 간체) 데이터를 말한다 캡처 그룹, 마지막 하나 "데이터 4".

<td>(.+?)<\/td>\s*<td>(.+?)<\/td>\s*<td>(.+?)<\/td>\s*<td>(.+?)<\/td> 

예, 나는이 해킹 수 있다는 것을 잘 알고 다음 한정사를 사용하고 4 개 캡처 그룹과 끝, 또는 내가 원하는 것을 얻을이 같은 정규식을 작성하는 강제 오전 수있는 방법이 있나요 간단한 예제를 프로그래밍 방식으로 훨씬 쉽게 적용한 다음 필요한 정규식 또는 간단한 패턴 일치를 적용하십시오. 필자가 작업하는 데이터는 훨씬 더 복잡하며 모든 구문 분석을 처리하기 위해 정규식을 사용하고 싶습니다.

+3

난 당신이 마지막 단락을 놓친 것 같아요. 이것은 "HTML을 파싱하는 가장 좋은 방법은 무엇인가"가 아니라 "정규식으로 가능한 것입니다"라는 질문입니다. –

+0

첫 번째 의견을 삭제했지만 여기있는 개념이 가치가 있다고 동의하지 않습니다. 정규식은 * 아주 * 간단한 경우 HTML을 구문 분석하는 데 적합합니다. 이것은 그렇게하지 않습니다. – lonesomeday

+2

다시 말하지만, 이것은 정규 표현식이 수량 기호를 사용하여 여러 그룹을 포착 할 수 있는지 여부에 대한 HTML 구문 분석과 관련이 없습니다. 이것은 그 요점을 설명하기위한 간단한 예입니다. –

답변

9

PHP를 사용하면 preg_match_all를 사용할 수 있습니다

$str = '<td>Data 1</td> 
<td>data 2</td> 
<td>data 3</td> 
<td>data 4</td> 
'; 
preg_match_all('/(?:<td>(.+?)<\/td>\s*)/', $str, $m); 
print_r($m); 

출력 :

Array 
(
    [0] => Array 
     (
      [0] => <td>Data 1</td> 

      [1] => <td>data 2</td> 

      [2] => <td>data 3</td> 

      [3] => <td>data 4</td> 

     ) 

    [1] => Array 
     (
      [0] => Data 1 
      [1] => data 2 
      [2] => data 3 
      [3] => data 4 
     ) 

) 
+0

나는 이것의 더 복잡한 버전이 내가 이미하고있는 일이기 때문에 이것을 upvoted. 그것은 수량 한정자와 함께 정규식 캡처 그룹에 대한 내 질문에 대답하지 않습니다. 질문의 원래 내용에 언급했듯이이 질문에 대한 프로그래밍 방식의 답변을 피하고 순수 정규식 관점에서 가능한지 알고 싶습니다. –

+0

@ 토니 Lukasavage : 고마워요. Unfortunatly, Tim Pietzcker가 의견으로 말했듯이, PHP에서는 불가능합니다. – Toto

관련 문제