2011-11-01 2 views
2

질문은 다음과 같습니다 : 어떻게 (단 하나의) 정규식을 사용하여 이것을 수행 할 수 있습니까? 가능한가?PHP : 정규식의 모든 그룹 가져 오기

설명 :이 같은 배열이 있습니다

code1 
1,5 
a,c 

I :

array 
(
    [0] => 'code1-{1,5}{a,c}', 
    [1] => 'code2-{3,6}{s,q}' 
) 

와 제가하고 싶은 것은, 얻을 정규식을 사용하는 것입니다, 모든 값은 같은 그룹화 이 정규 표현식을 사용하여 {...} 내부의 모든 데이터를 가져올 수 있다는 것을 알고 있습니다.

'/\{([^\}]*)\}/i'

나는 내가이 두 정규식을 병합 할 수 있는지 모르겠어요이게 무슨 일

/(.*?)\-/i

가 사용 대시하기 전에 문자열을 얻을 수 있다는 것을 알고 게다가. 나는이 정규식

'/(.*?)\-\{([^\}]*)\}/i'

이있는 경우 가리키고, 나는 내가 필요로하는 모든 데이터를 얻을 수 없습니다.

'/(.*?)\-\{([^\}]*)\}\{([^\}]*)\}/i'

하지만 입력의 형식 (10) {...} 그룹을 말할 변경한다면, 그것은 더 그렇게 우아한 없다

양식의 10 그룹을 가지고 : 나는 또한 같은 것을 할 수 있다는 것을 알고 \{([^\}]*)\} 그리고 그것은 내 질문의 요점이 아니야.

첫 번째 정규 표현식 ('/\{([^\}]*)\}/i') : http://ideone.com/mN3T2

병합 된 정규식 ('/(.*?)\-\{([^\}]*)\}/i') : 여기

내가 노력하고있어 코드입니다 http://ideone.com/gMdOa

답변

2

업데이트 : OP의 편집

나는이 두 정규 표현식을 병합 할 수 있다고 생각하지 않는다. 여전히 {1,5} 양식의 경기를 반복 할 수 있습니다. 두 가지 별도의 정규 표현식을 사용하여 coden을 캡처하고 다른 하나는 {} 사이의 텍스트 일치를 반복하는 것이 더 좋습니다. 이 작업을 수행하는

한 가지 방법은이

$result = preg_split('/-/m', 'code1-{1,5}{a,c}');

같은 이상 -을 분할하는 것입니다 그리고 당신은 두 번째 항목으로 첫 번째 항목으로 code1{1,5}{a,c}를 얻을. 이제 정규 표현식을 적용하여 두 번째 항목에 대해

\{([^\}]*)\}을 적용하고 일치 항목을 반복합니다.

관련 문제