2017-04-04 6 views
1

'>>'이있는 문자열이 있습니다. 'test >>>'를 'test >>>>'로 바꾸려고합니다.preg_replace 두 개의 화살표가 공백으로 표시됩니다.

않는 str_replace 아무것도 교체 나던, 그래서 나는 사용하여 시도했다 :

$string = preg_replace("/[\>\ \>]/",">>>>", $string); 

을하지만이 문자열의 모든 공간뿐만 아니라 화살표를 대체합니다.

그래서 문자열은 /[\>\ \>]/ 정규식 중 하나 > 단일 문자, 공백이나 > 일치 'test>>>>>>>>' 대신

+0

"str_replace가 아무 것도 대체하지 않습니다."- 예. 실제로 그것이 의도 한 바가 분명합니다. 그래서 다른 접근 방식을 사용하는 것을지지하는 동안 다른 접근 방식이 실패했을 때 원래 코드로 되돌아 가야하고 그것에 대한 질문을 던져야합니다. str_replace의 구문은 여기에서 작업을 훨씬 간단하게 해결할 수 있습니다. 정규식은 매우 유용하지만 * 매우 강력하고 이해하기 쉽지 않으며 잘못 이해하기 쉽습니다 *. – symcbean

답변

1

'test >>>>'의 같은 끝과 preg_replace (기본적으로) 여러 번 대체합니다.

특정 상황에 맞는 요구 사항이없는 경우, 당신이 str_replace

같은
$s = "test > >"; 
echo str_replace('> >', '>>>>', $s); 

당신이뿐만 아니라 다음 또는 > 앞에는 > >를 교체하려는 경우 PHP demo

참조 사용할 수 있습니다, 당신은

을 시도 할 수 있습니다
echo preg_replace("/(?<!>)> >(?!\s*>)/",">>>>", $s); 

another PHP demoregex demo. 0+ 공백이 > >>에 따라 여기에 경우 >이 경기를 실패 >과 공간, (?!\s*>) 내다 앞에 오는 경우

(?<!>) lookbehind는 경기를 실패합니다.

+0

당신의 답변은 작동하지만, 사용하는 문자열이 아닙니다. 내 문자열에 문제가 있습니다. – user3312792

+0

문자열은 배열에서 가져오고 인쇄되면 '>>'을 볼 수 있지만 str_replace 또는 preg_replace는 공백이있는 화살표를 찾지 못합니다. 이것을 시도하기 전에 문자열을 청소하는 방법이 있습니까? – user3312792

+0

하드 공간이 있다는 것을 의미합니까? 그런 다음'preg_replace ("/> \ s>/u", ">>>>", $ s);'를 사용하십시오. '>'사이에 공백이 둘 이상있을 수 있다면'\ s' 다음에'+'를 추가하십시오. '>', linebreak char,'>'과 일치하지 않으려면'\ s'를'\ h'로 바꿉니다. –

0
$input_lines = "I have a string which has '> >'. I am trying"; 
echo preg_replace("/(?<!>)> >(?!\s*>)/", "-----", $input_lines); 

출력은 다음과 같습니다 내가 가지고있는 문자열이 '----'. 나는 노력하고있다

preg_replace (REG_PATTERN, REPLACEMENT, INPUT_STRING); 원하는 출력을 리턴하십시오.

'>>'이 (가) 포함 된 모든 문자열에서 작동하거나 문자열에 이중 공백이있을 수 있습니다. 정규식에서>와> 사이의 공백을 늘리면 대체 할 수 있습니다. 행복한 코딩.