2012-08-29 3 views
1

텍스트의 커스텀 태그와 일치하는 정규 표현식을 찾으려고합니다. 태그의 형식은 항상 [! - sometext--] 또는 [! - sometext : param1--], [! - sometext : param1 : param2--]입니다. 내가해야 할 일은 "sometext"파트와 선택적인 params를 "param1 : param2"또는 "param1"과 "param2"로 따로 따로 가져 오는 것입니다 (중요하지 않음). PARAMS없이 태그커스텀 태그를 찾는 정규식

내 접근 방식은

\[!--(.+?)--\]

하지만 어떻게 내가 우아한 방법으로 PARAMS 부분 일치합니까?

답변

1

업데이트 : 확인 : 3 번째로 매력이 있어야합니다. 맞습니까? ;-) 이것은 샘플 Perl 스크립트에서 저에게 효과적입니다.

이 그것을해야한다 (그리고 나는 펄 호환 REG-전 있으리라 믿고있어 ... 당신은 당신이에 쓰고있어 어떤 언어로 지정하지 않음) :

\[!--([^\]:]+):?([^\]-]+?)?--\] 

여기 무슨 일이야 ?

  1. 먼저 우리는, 우리가
  2. 그런 다음 우리는 옵션을 선택 대장과 일치 우리는 그 다음 : 또는 ]
  3. 을 아니에요 아무것도 일치 (캡처)를 할 그런 다음 [!--
  4. 일치 - 또는 ]이 아닌 항목을 비 탐욕적으로 검색하고 캡처합니다 (이 경우 모든 선택적 매개 변수를 즉시 캡처해야 함).
  5. 다음으로 끝내려면 --]

:에있는 선택적 매개 변수를 분할하여 여러 개가있을 수있는 경우를 파악해야합니다.

+0

은 그와 비슷한 일을했다,하지만 'ㅋ [! - disclaimer_vat--] blupp [! - disclaimer_vat은 -]' 는 'disclaimer_vat--] blupp [위해 경기를 생산하는 것 ! - disclaimer_vat' (욕심 때문에). – smares

+0

나는 다음과 같이 작동한다고 생각한다 : '/\[!--(-- +?)(?:\:()+?))----- ' – smares

+0

나는 그것을 욕심 많은 변종으로 바꿨다. 그게 효과가 있는지보십시오. 나는 당신이 마지막으로 잡은 성냥에서 닫는']'을 치지 않도록 할 수 있다고 생각한다 :'([^ \] -] +?)?' –

관련 문제