2014-10-16 2 views
-1

정규식의 차이는 무엇 '/ [^ 0-9] /'또는'/ \ D /'또는'/ \ D /'? 그리고 단일 따옴표를 사용하는 것이 더 나은가? 물론preg_replace '/ [^ 0-9] /'또는 '/ D /'또는 '/ d /'사이의 차이점은 무엇입니까?

$number = '123asd456.789,123a4!"·$%&/()=/*-+<br>'; 

preg_replace('/\D/', '', $number) = 1234567891234 
preg_replace('/\d/', '', $number) = asd.,a!"·$%&/()=/*-+ 
preg_replace('/[^0-9]+/', '', $number) = 1234567891234 

내가 몇 가지 테스트를하고 그 내 결과를했다, 난 그냥 좀 더 각 정규 표현식을 알아 보았 싶다. 그리고 더 나은 성능 현명한가?

감사합니다.

+0

"감사합니다!" 이전 조사에서 왜 특정 자리 표시 자에 대해 혼란스러워하는지 설명했습니다. 한 줄 질문에 대한 오랜 설명을 기대하는 것은 다소 무례합니다. – mario

+0

'[0-9] \ d [digit]'가 모두 동일합니다 –

답변

1
\d identical with [0-9] - digits in expression 
\D identical with [^0-9] - NOT digits in expression 

작은 따옴표를 사용합니다.

preg_replace('/\D/', '', $number) - 1234567891234 

는 모든 비의 자리를 대체 할 '

preg_replace('/[^0-9]+/', '', $number) = 1234567891234 

는 모든 비의 자리를 대체 할 것이다' '

preg_replace('/\d/', '', $number) = asd.,a!"·$%&/()=/*-+ 

이 모든 자리를 대체 할'당신의 예에서

'

+0

'\ d'는'\ p {Digit}'과 같고'[0-9]'이상 일치합니다. 유니 코드 숫자이며 로캘에 따라 다릅니다. 참조 : http://perldoc.perl.org/perlrecharclass.html – Toto

5

\D은 숫자를 제외한 모든 것을 의미합니다. 별칭은 [^0-9]입니다.
\d은 숫자를 의미합니다. 별칭은 [0-9] (^ 제외)입니다.
"' 사이에는 아무런 차이가 없습니다. " 또는 ' 내부를 사용하지 않고이 문자열 안에 PHP 변수가 없기 때문입니다.

+1

사실,'\ d'는'\ p {Digit}'과 같고'[0-9]'이상 일치하며 유니 코드 숫자를 포함합니다 지역에 따라 다릅니다. 참조 : http://perldoc.perl.org/perlrecharclass.html – Toto

+0

긴 대답은 "it depends"입니다. PCRE는 "Perl Compatible Regular Expressions"를 나타내지 만 Perl 및 Python 3.x 정규 표현식은 다른 유니 코드 "digit" Python 2.x는 그렇지 않으며 PCRE는 PCRE_UCP로 _unless_ 컴파일되지 않습니다. 궁극적으로 이것은 "0-9"를 실제로 의미하는 경우 [0-9]를 사용한다는 것을 의미합니다. – GreenReaper

관련 문제