2013-03-27 4 views
1

안쪽에있는 괄호 밖에있는 텍스트를 바꿉니다.preg_replace에서 대괄호로 묶지 마십시오.

나는이

$pro_name = samsung galaxy s3 (s3); 
    $new_pro_name = preg_replace("/\b(s3)\b/i",***s5****,$pro_name); 
    echo $new_pro_name; 

예상 결과와 같은 시도 :

samsung galaxy ***s5**** (s3) 

출력 : samsung galaxy ***s5*** (***s5***)

+0

괄호는 정규 표현식 연산자입니다 참조, 그래서 그런 식으로 괄호를 사용 :/\ B \\ (S3 \\) \ B/내가 볼 –

답변

1

:

$pro_name = 'samsung galaxy s3 (s3)'; 
$new_pro_name = preg_replace("/(?<!\()s3(?!\))/i", '***s5****', $pro_name); 
echo $new_pro_name; 

참고 (?<!x) 그 이전 문자에서 다시 모습을 어느해야하지 될 'X '. 는 경우이 (을 할 필요가 있지만,이 특수 문자이기 때문에 그것은 \(

(?!x)으로 탈출 할 필요가 X 아니다 문자를 미리 볼 수 있습니다. REGEX에 사용되는 특수 문자의 고장에 대한

는 PHP의 preg_quote(); http://php.net/manual/en/function.preg-quote.php

1

()은 정규 표현식에서 의미가 있습니다. \(\)으로 이스케이프 해보세요.

+0

http://fp.net/manual/en/function.preg-quote.php – Waygood

+0

나는 ur 포인트를 얻을 수 없다. 설명 할 수있는 –

+0

'특별한 정규 표현식 문자는'preg_quote();'이다. :. \ + *? [^] $() {} =! < > | : -' – Waygood

1

이 시도 :

$pro_name  = "samsung galaxy s3 (s3)"; 
    $new_pro_name = preg_replace("/(.*)s3(.*)\((.*)\)/i","$1s5$2($3)",$pro_name); 
    echo $new_pro_name; 

출력 : samsung galaxy s5 (s3)

참조 : http://php.net/manual/en/function.preg-replace.php

+0

이것이 작동하고 있습니다. 어떻게 작동하는지 설명 할 수 있습니까 ??? –

+0

s3 전후의 텍스트와() 안의 텍스트를 일치시키고 s3 reaplce에서 s5로 새 문자열을 만듭니다. Ref 링크 http://php.net/manual/en/function.preg-replace.php를 사용하면 더 좋은 결과를 얻을 수 있습니다 idea –

+0

문제를 해결하는 데 도움이된다면, 그것을 받아들이지 말고 다른 사람들이 답을 찾는데 도움이 될 것입니다. –

1

이 시도 : 괄호를 확인하기 위해 미리 볼 사용하고 s3+(?=[^()]*(\(|$))

. 부정의 전환 확인 및 http://www.regular-expressions.info/lookaround.html

우리는 다음과 같은 사용할 수 있습니다 내다 사용

$pro_name = samsung galaxy s3 (s3); 
$new_pro_name = preg_replace("/s3+(?=[^()]*(\(|$))/g", 's5', $pro_name); 
echo $new_pro_name; 
+0

전체 정규식을 게시 할 수 있습니다 ... –

+0

예제를 추가했습니다 – sybrek

관련 문제