2013-04-05 2 views
0

CODE :
간단한 정규식 : 나는 기간을 잡을 수없는 것

$raw = "Test List: Dist. dist Disti distributor"; 
$repld = preg_replace('/\b(dist(\.|i?)(ributor)?)\b/i', 'ruff', $raw); 
echo $repld; 

기대 :
시험 목록 : 멍 멍 멍 멍

가져 오기 :
테스트 목록 : ruff. ruff ruff ruff

그 첫 번째 "ruff"이후에 완고하게 약간의 시간이 있습니다.
허용, 나는 정규 표현식이 아니지만 \.이 일치한다고 생각했습니다.

어디서 잘못 되었나요?

답변

2

\b. 사이의 부분과 일치하지 않습니다. 왜냐하면 그건 단어 경계가 아니기 때문입니다.

\b 과거 \. 이동

: 물론 지금은 Distributor. 일치

$repld = preg_replace('/\b(disti?(ributor)?)\b\.?/i', 'ruff', $raw); 

하지만 당신이 원하는하지 않을 수도있다. 그러나 원래의 코드조차도 distiributor과 일치합니다.

+0

'distributor.'와 일치해도이 경우에는 문제가 발생하지 않습니다. 감사. – mOrloff

+0

왜 '.'와 일치하지 않는지 명확히 할 수 있습니까? 나는 그 설명을 이해하려고 고심하고있다. – mOrloff

+1

이 예제에서 사용되지 않은 모든 경우를 무시하여''Dist. ''문자열에 대한 정규 표현식을 단순화하면'/ \ bdist \. \ b/i'가됩니다. 그래서'\ b'는'.' 다음에 그리고''- b'가 너비가없는 패턴이므로 특정 문자 나 문자열과 일치하지 않는다는 것을 기억하십시오. 그것은 두 문자 사이의 한 점에서만 일치합니다 . 그러나'\ b'는 항상 문자 경계 앞에 매다는 문자가 있어야한다는 뜻입니다. '.'이나''는 문자가 아닙니다. 그게 더 명확한가요? – drquicksilver

관련 문제