2017-01-15 7 views
1

은 내가 Rememberthemilk.com 형식으로 작업 설명을 구문 분석 TextWrangler와 함께 사용하는 것이 정규식을 찾기 위해 노력하고있어 : 그래서 라인 같은 :RegEx 특정 후방 참조가있는 무한 반복 패턴 캡처 중?

Example task section 1 section tomorrow section tagone tagtwo tagthree tagfour 

가 RTM 형식으로 변환 whould :

Example task !1 ^tomorrow #tagone #tagtwo #tagthree #tagfour 

이제는 역 참조에서 올바른 구문을 사용하여 무한 반복 패턴을 어떻게 캡처합니까?

나는이 정규식 노력했습니다 : 입력 텍스트의 형식을 캡처하는 것

^([\w ]+) section (\d) section (\w+) section ((\w+))+$ 

,하지만 난 그냥 역 참조의 변환을하는 방법을 몰라?

\1 !\2 ^\3 #(???) 

어떻게하면됩니까?

+0

대체 문자열의 각 문자는 정확히 한 번만 사용됩니다. 최종 그룹의 매치마다 "#"을 반복 할 수는 없습니다. 항상 동일한 수의 태그가 있다면 개별적으로 일치시킬 수 있지만 그럴 수는 없다고 가정합니다. – jasonharper

+0

대체 및 역 참조만으로이 작업을 수행 할 수 있다고 생각하지 않습니다. 보다 완벽한 프로그래밍 언어로이 작업을 수행하면 (예 : C#에서 특정 그룹에 대한 모든 캡처에 액세스 할 수 있음) 예 : https://gist.github.com/Porges/9ba3b7f94f2c14e20feb16c984406e5a#file-example-cs – porges

답변

0

캡쳐 된 그룹을 정량화하지 마십시오.

여기

우리는 또한 내부 섹션에 괄호 (아무 캡처 그룹) "만 그룹화"를 사용하고 깨끗한 결과를 얻기 위해 외부 캡처 : 당신이 내부 ()을 캡처 반복 constuct에게 원하는

([\w ]+) section (\d) section (\w+) section ((?:\w+\s?)+) 

을 "그룹 반복"은 의미가 없지만 대부분의 엔진에서는 일치하는 그룹의 마지막 결과 만 캡처됩니다.

데모 (일부 정규식 엔진이 반복 캡처 그룹은 모든 하위 일치 예를 들어 (.NET)을 기억 할 수 있지만) : https://regex101.com/r/y3CryR/2