2014-07-05 1 views
0

나는 잠시 동안 WordPress로 작업 해 왔고, 그 의미를 알지 못하는 shortcode_unautop 내부의 정규식을 보았습니다. 이WordPress의 PHP * + Regex 수식어

/<p>\s*+(\[(?:$tagregexp)(?![\w-])[^\]\/]*(?:\/(?!\])[^\]\/]*)*?(?:\/\]|\](?:[^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+\[\/\2\])?))\s*+<\/p>/s

당신이 \s*+ 형태와 일치하는 정규 표현식과 최고의 공백을 볼 수 있습니다 :

는 shortcode_unautop 정규 표현식입니다. *+ (별표 뒤에 + 기호가 있음)은이 정규식 내부에서 무엇을 의미합니까? 참고로, www.regexr.com 사이트에서는 *+이 잘못된 수정 자라고합니다.

감사합니다. PCRE에서

답변

3

, 다른 정량 후 정량 +은 (중 * 또는 + 또는 ? 심지어는 {m,n}) 실제로 수정은 앞의 정량은 그래서 지금 possessively 일치합니다.

*+은 역 추적없이 0 이상을 의미하는 possessive quantifier입니다.

역 추적은 정규식의 기본 프로세스 중 하나입니다. abcbaba을 문자열로 사용하고 정규식 .*bc을 사용한다고 가정 해 보겠습니다.

.* 먼저, 화살표 방향으로 이동합니다 엔진

:

a b c b a b a 
^ 
a b c b a b a 
^
a b c b a b a 
    ^
a b c b a b a 
    ^
a b c b a b a 
     ^
a b c b a b a 
     ^
a b c b a b a 
      ^
a b c b a b a 
      ^

을이 시점에서, 그것은 더 그래서 한 번에 하나 개의 문자를 역 추적 할 정규식에 b 일치 할 수 있도록 일치하지 않을 수 있습니다 . 이 c을 일치 시키려고 있도록

a b c b a b a 
     ^

, b 일치하지만, 하나를 찾을 수 없습니다

a b c b a b a 
      ^

없음 b은 계속합니다. 그것은 다시 역 추적하고 몇 가지 단계 이후 ...

a b c b a b a 
^ 

그래서 .*a 일치 끝났다. .*+

, 당신은

a b c b a b a 
      ^

그러나 더 일치하지 않을 수 있습니다 ... .*은 첫 번째 경우처럼 모든 일치에 도착하고 되돌아가 그것을 금지되어 있습니다. 따라서 일치하지 않습니다.

가끔은 역 추적을 원하지만 다른 경우에는 반대가 아니며 불쾌합니다. 그래서 속도를 높이기 위해 소유량 한정 기호와 원자 그룹을 가지고 있습니다.

+0

감사합니다, 지금은 이해가됩니다 :) –

+0

@MairelTheafila 저기, 내가 지금하고 싶은 모든 것을 추가했습니다 :) – Jerry