2014-04-10 2 views
-1

으로 시작하고 끝나는 짧은 단어 세트를 모두 삭제하고자합니다 (예 : == some text ==). preg_replace로 그 작업을 만들고 싶지만 작동하지 않습니다. 이 내 코드입니다 :preg_replace 및 정규 표현식으로 실패합니다.

$string = preg_replace('/[==][ ][a-z|A-Z|0-9][ ][==]/', "", $string); 
+3

대괄호 안에 있으면 안되는 대괄호 안에 많은 것을 넣을 것입니다. 그들을 괄호로 혼동하고 있습니까? '/ == [a-zA-Z0-9] == /'는 동일하게 수행 되겠지만'/ (==)() (az | AZ | 0-9)() (==) /' 맡은 일. 그러면 문자를 반복하기를 원할 것입니다.'[a-zA-Z0-9] +'. 모든 텍스트는'. *? '입니다. 무엇을 성취하려고합니까? – Ryan

답변

2

한 가지 가능한 방법 :

$string = preg_replace('/==.*?==/', '', $string); 

예, 원래의 패턴이 추가 검사를 가지고 있음을 알고,하지만 난 정말 사람들은 도움이 될 것입니다 의심한다.

$string = preg_replace('/== [a-zA-Z0-9]+ ==/', '', $string); 

현재 정규식에서이 심각 문자 클래스를 오용 (괄호로 정의) : 완성도를 위해서,하지만, 여기에 적절한 regexian에 기록 된 (아마도) 원래 의도는,입니다. 첫째, 문자 클래스는 단일 문자 문자 만 번갈아 사용할 때 유용하므로 [==]은 실제로 [=]과 동일하며 (단지 =보다 덜 효율적입니다).

둘째, 클래스 자체 내에서 교대로 사용하는 것은 의미가 없습니다. [a-z|A-Z|0-9]은 실제로 두 글자와 숫자 AND | 부호와 일치합니다. 이 클래스를 사용하는 적절한 방법은 [a-zA-Z0-9]입니다.