2011-04-24 5 views
0

누구든지이 정규식에서 각 문자의 의미를 설명 할 수 있습니까?이 PHP 정규식 패턴은 무엇을 의미합니까?

...preg_match('/\{loop(?: name){0,1}=\${0,1}(.*?)\}/', $html, $code)... 

?

+2

너무 지역화 .. –

+0

항목 : http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world 좋은 정규식하는 분석 및 디버그 도구. – mario

답변

3

이것은 아마도 템플릿 파서의 일부인 것처럼 보입니다.

\{loop(?: name){0,1}=\${0,1}(.*?)\} 
-------------------- 

{loop name 또는 {loop 일치합니다. ?:은 해당 하위 패턴을 matches 배열에 넣지 않도록 파서에 지시합니다. {0,1}은 0 번 또는 1 번 나타날 수 있음을 표시합니다.

\{loop(?: name){0,1}=\${0,1}(.*?)\} 
        --------------- 

는이 텍스트 다음에 선택 사양 인 달러 기호 ($) 다음 기호를, 동일 일치, 가장 가능성이 변수 이름은 {0,1}}

인스턴스으로 마무리가로 대체 될 수 있었다 a ?

+0

감사합니다! 어떤 문자가'$ '를 선택 사항으로 만드나요? 그리고 어느 것이 필요하게 만들까요? – Alex

+0

ohnvm, 당신은 방금 {0,1}이 그렇게했다고 말했습니다. – Alex

2

/ - 처음 시작하는 RegExp.

\{ - 일치하는 문자는 {입니다. => [{]

loop이 - 단어 "루프"일치 => [{loop]

?:가 함께 - 그룹 여러 토큰 - 배열 => [{loop]

( * ) 일치에 포함되지 않는다. 이를 통해 정량 그룹을 전체 그룹에 적용 할 수 있습니다. 캡처 그룹이 만들어집니다.

name - 이전 정규식 0 시간 1 일치 - 단어 "이름"=>{loop(name)

{0,1} 매치.

=\$ - "= $"와 일치합니다. =>{loop(name)=$

{0,1} - 이전 정규 표현식을 0 ~ 1 번 일치시킵니다.

(.*?) - . = 임의의 단어 문자. *? 앞의 토큰 중 0 개 이상 일치합니다. =>{loop(name)=$anything

\} - 일치 문자는 }입니다. =>{loop(name)=$anything}

/ - 끝의 RegExp.

4

Regex 자유 간격 'x'모드는 구조에 댓글을 달았습니다!

$re = '/ 
    \{   # Match a literal "{". 
    loop  # Match the literal text: "loop". 
    (?:  # Begin non-capture group to 
    [ ]name # match the literal text: " name" 
){0,1}  # from zero to one times. 
    =   # Match a literal "=". 
    \${0,1} # match literal "$" from zero to one times. 
    (.*?)  # Capture in group $1 zero or more non-"\n". 
    \}   # Match a literal "}". 
    /x'; 
+0

'/]를 추가 할 때'[]'가 공백 문자를 대체합니까? – Alex

+0

@Alex : 예. 자유 공간 모드에서는 이스케이프 또는 문자 클래스 내부의 모든 공백이 무시됩니다. 즉''[] ''대신에''\ "'(읽기 쉬운 IMHO)라고 말할 수있었습니다. – ridgerunner