2012-04-09 4 views
-2

나는 정규 표현식에 아주 나쁜 생각 때문에 약간의 도움이 필요합니다 나는 내용이 하나의 정규 표현식으로 여러 옵션을 찾을 필요가PHP - 정규 표현식 여러 옵션 구문 분석

:

  1. {{ Value }}을 - 항상
  2. {{ Value | Value 2 }} - 선택적인 두 번째 부분 - | 값 2
  3. {{ Value | Value 2(Value3) }} - 선택 세 번째 부분 - (VALUE3)

규칙 : 스페이스 전이나 내가 가진 무엇

이입니다 값 뒤에 허용하지만 세 가지 요구 사항과 옵션이 작동하지 않습니다 :

/\{{(.*)|(.*)}}/siU 

답변

1
/\{{2}\s*?(.+)(?:\s*?\|\s*?(.+)\s*?(?:\(\s*?(.+)\s*?\))?)?\s*?\}{2}/isU 

아름답게 스스로이하시기 바랍니다.

  • \{{2}는 개구 중괄호 (\{), 이들을 정확하게 두 개 ({2})이다.
  • \s*?
  • 가 공백 ( \s)이고, 0 회 이상 ( *) 및
  • (.+) 모든 문자 (.)이다 (ungreedy 모드 ?) 수만큼, 한 번 이상 (+)
  • (?:x)?은 (?:) 결과에 추가되지 않고 한 번 또는 한 번 (후행 ?) 발생해야하는 하위 표현식 x입니다. 여기에서 "값 2"부분을 선택적으로 만드는 데 사용됩니다.
  • \s*?\|\s*?은 발견 된만큼의 공백, 세로 막대 및 공백 (발견되는 경우)이 많습니다.
  • 그 다음에 "값 3"에 대한 또 다른 선택적 하위 표현식이옵니다.
  • \(\s*?(.+)\s*?\)는 개구 (다시 \s*?) 발견 많은 공백로서 괄호 (\(), 실제 콘텐츠 (하나 개 이상의 문자 .+) 이상의 공백 및 닫는 괄호이다.
  • \}{2}은 닫는 중괄호이며 그 중 정확히 두 개입니다.
0

내 접근

/\{\{[\s\W]*((\w+)([\s\W]*\|[\s\W]*([\w]+)([\s\W]*\([\s\W]*(\w+)[\s\W]*\)[\s\W]*){0,1}){0,1})[\s\W]*\}\}/