을 나는이 :교체 : ": D"내부를 제외하고 D 이모티콘,
$txt = ':D :D ":D" :D:D:D:D';
내가 다음 대체하지 preg_replace
모든 :D
에 ^
과 ":D"
경우합니다.
===> output: '^^":D" ^^^^';
을 나는이 :교체 : ": D"내부를 제외하고 D 이모티콘,
$txt = ':D :D ":D" :D:D:D:D';
내가 다음 대체하지 preg_replace
모든 :D
에 ^
과 ":D"
경우합니다.
===> output: '^^":D" ^^^^';
(SKIP *) (* F) 바닥 창에서 대체 참조 the demo에서
$replaced = preg_replace('~"[^"]+"(*SKIP)(*F)|:D~', '^', $yourstring);
마법.
이 문제는 기술의 고전적인 사례가 "regex-match a pattern, excluding..."
이 문제의 엔진이 문자열의 다음 위치로 건너 뜁니다 후 "quotes"
|
일치 완료 교대의 왼쪽 후 의도적으로 실패를 설명한다. 그래서 따옴표는 중립입니다. 오른쪽은 :D
과 일치하며 왼쪽에있는 표현과 일치하지 않기 때문에 올바른 것으로 알고 있습니다.
당신은 부정적 예측을 사용하고을 lookbehind 수
참조,
(?<!\"):D(?!\")
과 일치하며 앞에는 "
(큰 따옴표)가 붙지 않고 그 뒤에 "
이옵니다. 그런 다음 일치하는 문자는 ^
<?php
$string = ':D :D ":D" :D:D:D:D';
$pattern = "~(?<!\"):D(?!\")~";
$replacement = "^";
echo preg_replace($pattern, $replacement, $string);
?> //=>^^ ":D" ^^^^
로 대체