2016-08-27 2 views
0

정규 표현식에서 두 개 이상의 구분 기호를 구분 기호로 사용할 수 있고 지울 수 있습니까? 몇 가지 예 :두 외부 구분 기호 사이의 내부 구분 기호는 무엇입니까

1) input: %word1 %word2%% then output: %word1 word2% 
2) input: %word1 %word2% %word3%%% then output: %word1 word2 word3% 
3) input: %%word1 word2% word3% then output: %word1 word2 word3% 

등등. 또는 적용은 가지고 예를 들어, 두 개의 구분 기호에서 문자열을 무시 대체 :

%word1 word2% text word2 

은 적용하지 않고 %의 word2의 %로 word2 교체 %의 단어 1 word2 %를 갖는 않도록 출력 뭔가 같은 :

%word1 word2% text %word2% 

아니요 :

고맙습니다.

답변

1

:

$ cat a.php 
<?php 
    echo preg_replace('/(?<!%)(word2)(?!%)/', '%word2%', '%word2% %word1 word2% text word2'); 
?> 
$ php a.php 
%word2% %word1 word2% text %word2% 

정규식은 다음과 같이 작동합니다 @Nehal에서 예를 복용

(?<!%)(word2)(?!%) 

Regular expression visualization

Debuggex Demo

+0

내가 지금 게시 한 코드를 확인해 줄 것을 요청할 수 있습니까? 정규 표현식에 PHP 변수가 전달되지 않습니다. 다시 한번 감사드립니다. –

+0

이 정규식 : (?

+0

@MarcelloImpastato 어쩌면 단어 경계를 사용할 수 있습니다. 여기에 대해 읽어보십시오 : http://php.net/manual/en/function.preg-match.php –

0

것이 도움이 아닌지 될 경우 나도 몰라하지만 간단한 해결책이있다 : 당신의 단어 사이에 '%'를 포함하는 경우

$string = "%%word1 word2% word3%"; 
$output = "%".str_replace("%", "", $string)."%"; 

그것은 작동하지 않습니다. 질문의 두 번째 부분에 대한

+0

입력 문자열을 다른 문자열의 문자열인지 안녕,이 솔루션이 작동하지. 그리고 명확한 외부 분리 문자없이 두 구분자 내에서만 효과가 있어야합니다. 입력 문자열이 % word %이면 단어를 반환하지 않아야합니다. –

+0

입력 문자열이 % word % 인 경우 % word %를 반환합니다. – aditya4447

+0

"% word1 word2 % word3 word4 word2"word2를 % word2 %로 바꿉니다. "% word1 word2 % word3 word4 % word2 % "아닙니다 :"% word1 % word2 %% word3 word4 % word2 % ". 당신의 해결책은 나를 돌려 줍니 다. "% word1 word2 word3 word4 word2 %"그러니 안 괜찮습니까? –

0

, 내가 가진 이제 코드의 두 부분 :

// CODE 1 
// string return: "word1 word2 word3 word4 word2" <-- failed 
$string = "word1 word2 word3 word4 word2"; 
$array = array("word1 word2", "word2"); 
foreach ($array as $value) { 
    $string = preg_replace('/(?<!%)($value)(?!%)/', '%$value%', $string); 
} 
echo $string; 

// CODE 2 
//string2 return: "%word1 word2% word3 word4 %word2%" <-- correct 
$string0 = "word1 word2 word3 word4 word2"; 
$string1 = preg_replace('/(?<!%)(word1 word2)(?!%)/', '%word1 word2%', $string0); 
$string2 = preg_replace('/(?<!%)(word2)(?!%)/', '%word2%', $string1); 
echo $string2; 

CODE1은 실패하지만 CODE2는 정상적으로 작동합니다. CODE1을 수정할 수 있습니까? 어떤 문제가 변수에 전달 된 정규 표현식의 값이라고 가정합니다. 어떤 해결책? 다시 한번 감사드립니다.

UPDATE : 해결 대체 :와

$string = preg_replace('/(?<!%)($value)(?!%)/', '%$value%', $string); 

:

$string = preg_replace('/(?<!%)('.$value.')(?!%)/', '%'.$value.'%', $string);