2012-10-24 3 views
2

아래 코드는 X가 1이 아닌 K ( )를 대체하지만 의도 한대로 작동하지 않습니다. 누군가 문제가 될 수있는 것에 대해 밝힐 수 있습니까? 감사!슈퍼 간단한 정규 표현식 (preg_replace)이 작동하지 않습니다

<?php 
    $test = "XXXX X1 X2 XXX X1"; 
    $test = preg_replace("/X([^1])/", 'K$1', $test); 

    echo $test; 
?> 

Input: XXXX X1 X2 XXX X1 
Expected output: KKKK X1 K2 KKK X1 

Actual output: KXKX X1 K2 KXK X1 

답변

5

일치 할 수 없습니다. 따라서 XX을 찾으면 정규식 엔진이 세 번째 문자에서 검색을 계속합니다.

(경기 자체의 일부가 될 수 있지만, 만 X1 다음에되지 않는다는 것을 보장하지 않습니다하는) 대신에 부정적 예측을 사용하여이 또한에서 X를 교체 편리해집니다

$test = preg_replace("/X(?!1)/", 'K', $test); 

[^1]은 실제 문자가 필요합니다 (1).

+0

트릭 @ m.buettner! (편집 : SO 타이머를 기다리는 중입니다. 당신의 대답을 받아 들일 수 있도록 틱하십시오) – KBN

관련 문제