2011-01-18 3 views
4

preg_replace를 사용하여 PHP에서 함수를 작성하려고합니다. 목록에서 찾을 수없는 모든 문자를 대체합니다. 일반적으로 우리는 그들이 발견 된 곳을 대체하지만 이것은 다릅니다. 예를 들어 PHP에서 preg_replace - NOT 조건을위한 정규식

내가 문자열이있는 경우 :

$mystring = "ab2c4d"; 

내가 * 모든 번호를 대체 할 다음과 같은 기능을 쓸 수 있습니다 :

preg_replace("/(\d+)/","*",$mystring); 

을하지만 어느 쪽도없는 그 문자를 대체 할 a에서 z까지 알파벳 또는 숫자. # $ *(); ~! {} [] | \ /., <>? ' 기타.

숫자와 영문 이외의 다른 문자로 바꿔야합니다. 어떻게해야합니까?

감사

답변

13

당신은 사용할 수 있습니다 시도해보십시오 negated character class (클래스의 시작 부분에 ^ 사용) :

/[^\da-z]+/i 

업데이트 : 내 말은, 당신은 으로 부울 문자 클래스를 사용하면 은 내가 제공 한 것을 사용하지만 다른 것들도 있습니다.)

+0

위대한 내가 이것을 사용했고 그것은 효과가 있었다. – Ali

3

preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring); 
2

\W은 영숫자가 아닌 문자와 일치합니다. _ 밑줄은 영숫자 목록에 포함되어 있으므로 여기도 일치하지 않습니다.

preg_replace("/\W/", "something else", $mystring); 

은 밑줄을 대체하지 않고 살 수있는 경우해야합니다. 사용할 수없는 경우

preg_replace("/[\W_]/", "something else", $mystring); 
+0

두 번째 정규식은 밑줄을 대체하지 않습니다. 대신 preg_replace ("/ [\ W _] /", "*", $ mystring)를 사용해야합니다. – Soumya

+0

@ Soumya92 : 나는 또한 그것을 알아 차렸다. 너무 빨리 게시, 나중에 편집 :) –

5

negated "character class"을 사용하고 싶습니다. 그들에 대한 구문은 [^...]입니다. 귀하의 경우에는 단지 [^\w]라고 생각합니다.

1

\d,및 이와 유사한 정규식은 모두 음수 버전으로, 동일한 문자의 대문자 버전입니다.

그래서 \w은 단어 문자 (즉, 기본적으로 영숫자)와 일치하므로 단어 문자를 제외한 모든 문자와 일치하므로 영숫자 이외의 문자는 모두 일치합니다.

이것은 사용자가 수행 한 것과 같습니다.

자세한 내용은 regular-expressions.info을 권장합니다.