2011-12-13 2 views
12

나는 밑줄 (_)와 이외의 모든 문자와 숫자 문자 즉 /&%#$ 등을 교체하고 ""빈 (그래서 아무 밑줄) 모든 ' (작은 따옴표)를 대체하고자하고있다.PHP의 preg_replace이다 특수 문자

그래서 (따옴표를 무시) "There_wouldnt_be_any을"될 것 "이되지 않을 것".

나는 reg 식에서 그러므로 게시물을 쓸모 없다.

건배

답변

26
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any"); 
$newstr = str_replace("'", '', $newstr); 

좀 더 명확 코드를 만들기 위해 두 개의 별도의 라인에 올려.

참고 : 유니 코드 지원을 찾으려면 아래의 필립스 응답을 참조하십시오. A-z 외에 문자로 등록 된 모든 문자와 일치합니다.

2

두 단계에서이 작업을 수행 :

  1. this 정규식하지 편지 쓰기 문자를 대체 :

    [\"\']

  2. :

    [\/\&%#\$]

  3. this 정규식에 따옴표를 교체

및 사용 preg_replace :

$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString); 
$stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters); 
28

작성하여 당신이 경우 "아닌 문자와 숫자"이상 [A-Za-z0-9]를 제외 (예. 문자를 åäö과 같은 문자로 생각하면) 정확하게 UTF-8 문자열 \p{L}\p{N}을 처리 할 수 ​​있기를 원한다.

  1. \p{N}는 ""
  2. \p{L}
    • 의 소문자 편지
    • 수정 편지
    • 다른 편지
    • 을 포함하고있는 " 문자 문자을"일치와 일치합니다
    • 제목 케이스 문자
    • 대문자

문서 내 경우 ßällistic에서 PHP: Unicode Character Properties


$data = "Thäre!wouldn't%bé#äny"; 

$new_data = str_replace ("'", "", $data); 
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data); 

var_dump (
    $new_data 
); 

출력

string(23) "Thäre_wouldnt_bé_äny" 
+0

는 업로드 후 ßällistic로 대체했습니다. – erdomester

+0

@erdomester에는 UTF-8을 지원하도록 컴파일 된 PCRE (정규 표현식 엔진) 버전이 있습니까? –

+0

나는 당신을 이해하고 있는지 잘 모르겠습니다. 파일은 BOM없이 UTF-8로 인코딩됩니다. 내가 FileZilla를 사용하고있다 – erdomester