2012-03-03 3 views
1

정규 표현식을 처음 사용하고 RegExr을 사용하여 다음 패턴을 검사했지만 preg_replace가있는 PHP에서는 오류가 발생합니다.Regex는 'RegExr'에서 작동하지만 preg_replace에서는 작동하지 않습니까?

행운을 남기지 않고 첫 번째 이스케이프를 위해 추가 백 슬래시를 추가하려고했습니다.

나를 올바른 방향으로 안내하는 도움은 크게 감사하겠습니다.

예 :

$output = preg_replace("/\[if](.*)[/if/]*/", ' ', $output); 

내가 수정하기 위해 노력하고있어 문자열은 다음과 같습니다 :

[if] <p>A statement goes here</p> [/if] 
+0

당신이 일부'는 error_reporting (0 ~) '을 가능하게 시도? – mario

+1

[UNC 경로 매칭을위한 PHP Regex] 중복 가능 (http://stackoverflow.com/questions/9485091/php-regex-for-matching-a-unc-path) - 이러한 문제가 발생할 경우 통찰력을 얻을 수 있습니다. PHP 문자열로 작성된 정규 표현식에서 슬래시. 이 온라인 툴의 대부분은 PHP 문자열을 제공하지 않고 단지 정규식을 제공합니다. PHP 용으로 추가 단계에서 인코딩해야합니다. – hakre

+1

수정하려는 문자열의 샘플을 사용하여 질문을 편집하십시오. 그 대괄호가 정규 표현식 논리의 일부인지 아니면 일치하려고하는 부분인지 확실하지 않습니다. –

답변

3
  1. 탈출 모든 [
    $output = preg_replace("\[if](.*)[/if/]*", ' ', $output); 
    

    가 나는 또한 슬래시를 추가하려고했습니다 님의 경우 ] 님의 개미 그것은 리터럴을 의미하기 위해
  2. 구분 기호가 필요합니다.
  3. 패턴에 구분 기호가있는 경우 이스케이프해야하거나 다른 구분 기호 (/ 때문에 %를 선택 함)를 선택해야합니다.
  4. 끝 부분 ]*, 0 번 이상 ] .... 정말인가요?
  5. 나는 ungreedy를 사용하는 것으로 의심됩니다. (.*?)이 더 많이 필요할 것으로 생각되지만, 나는 당신에게 맡깁니다.

을 제공합니다 :

"%\[if\](.*)\[/if\]%" 
+0

감사합니다. 이것은 이해할 수 있습니다. 나는 그것을 대체하고 오류는 없다 - 그러나 문자열은 대체되지 않았다? 질문에 문자열을 추가했습니다. – jsuissa

+2

그 이유는 정규식에서 last를 제거해야하기 때문입니다. 거기에 무엇이든 [if] 대체하려고합니다. 또한 마지막 *도 갈 수 있습니다. –

+0

이제 완벽하게 작동합니다. $ output = preg_replace ("% \, if \] (. *?) \ [/ if \] %", '', $ output); – jsuissa

관련 문제