2011-10-17 2 views
1

나는이 같은 문자열이 나는 다음 결과를 얻는다? 귀하의 preg_replacePHP는 정규 표현식 반복되는 문자 [최대 반복 charachers을은]

"ABZCDEF" 
+6

나를 위해 * "ABZDEF"*를 반환합니다. [CodePad] (http://codepad.org/RoiH5dOI). – alex

+0

실행중인 PHP 버전은 무엇입니까? –

+1

간단한 예제가 아닌 실제 실행중인 코드를 표시하십시오. 그리고 그 코드의 의도가 무엇인지 설명하십시오. '/ C {3} /'를 검색 정규 표현식으로 사용할 때 나타나는 결과를 얻습니다. –

답변

3

를 제공하는 것은 당신이있어 무엇인가 찾고 :

$value = preg_replace('/([C]{3})+/', "Z", $value); 

... 또는, "세 개의 C 그룹 중 하나 이상을 Z으로 바꿉니다." 게시 한 코드가 말하는대로 작동하지 않습니다. 나는 팀이 제안, 당신은 정말이 일을하고, 의심 :

$value = preg_replace('/[C]{3}/', "Z", $value); 

참고 쉼표 (,)의 부재를. 이 Z와의 '의 내 버전은 세 가지 C모든 그룹을 대체하는 Z와의'세 C의 각 그룹을 대체합니다.

EDIT : ... 또는 마리오가 제안했듯이, 당신은 정말 탐욕스러운 성냥을하고 있습니다. 이 경우 "정규식"문자열은 '/[C]{3,}?/' 또는 '/[C]{3,}/U'이됩니다.

+0

정확히 내가 원하는 것! 더하기 기호가 없습니다! 감사 – fkingan

1

ungreedy에 기본 보인다. 이 경우 당신은 그래서는 최소 3의 문자 의미 추가 +으로 {3,} 정량을 변경할 수 있습니다

= preg_replace('/[C]{3,}+/', 
+4

이미 최소 3자를 의미합니다. '+'는 한정어를 소유로 만들고,이 경우에는 결과를 전혀 변경하지 않습니다. –

+0

팀 말이 맞아, 수량 기호를 소유욕으로 바꾸면 욕심이 바뀌지 않고 단지 역 추적을 사용할 수 없습니다. 즉 욕심쟁이 한정 기호는 항상 최대 값을 취하고 비 욕심 값은 항상 최소값을 취합니다. 전체적으로 일치하지 않을 수도 있습니다. –

+0

@AlanMoore : 우리는 이미 Tim이 옳았다는 것을 알아 냈습니다. 그러나 명명법은 실제 결과에 지나치게 관련이 없습니다. – mario

4
<?php 
$a = "ABCCCCCCCCCCCCCDEF"; 
echo preg_replace('/[C]+/', 'ZC', $a); 
?> 

내가이 생각

ABZCDEF