URL이 www.example.com
이거나 단지 http://example.com
이라고 가정합니다. 이러한 패턴의
지금, 당신의 필요에 따라 선택할 수있는 하나 http://
, https://
또는 www.
가 선행되지
예를 : (?<!http://|https://|www\.)example
예 .com
다음에하지 : example(?!\.com)
다음과 같이 두 번째 패턴을 사용하여 스타일이 적용된 스타일로 대체하십시오 (
).
preg_replace('#example(?!\.com)#i', 'ExamPle', $message)
대소 문자를 구분하지 않으려면 패턴을 #
... #i
으로 묶습니다.
두 번째 패턴은 더 나은 결과를 제공해야하는 example.com의 독립 실행 형 언급을 제외합니다. 사용자가 게시 한 콘텐츠가 있다고 가정 해 보겠습니다. 여기에 ... example.com에 대해 내가 좋아하는 것은 bla bla bla ...입니다. 이 경우 두 번째 패턴은 예 : 단어를 대체하지 않지만 첫 번째 패턴은 그렇습니다. 나는이 상황에서 소문자로 남아 있어야한다고 생각한다.
이제 http://something/example/something
과 같은 문자열의 경우가 있는데, 두 가지 방법으로 해결할 수 있습니다.
최초의 솔루션 :
(?:https?:\/\/|www\.)\S+(*SKIP)(*FAIL)|example(?!\.com)
Demo
이, URL을 일치하는 전체 URL을 소모하고, URL의 끝에 오프셋 다음 시작을 설정하는 동안 다음 경기를 실패하여 작동합니다.
코드 :
preg_replace('#(?:https?:\/\/|www\.)\S+(*SKIP)(*FAIL)|example(?!\.com)#i', 'ExamPle', $message)
둘째 솔루션, 당신이 되돌아 동사 편안하지 않은 경우 :
(?:https?:\/\/|www\.)\S+|(example(?!\.com))
See here이 패턴과 일치하는 방법에 대한 아이디어를 얻을. 기본적으로 URL은 대체 URL의 왼쪽과 일치하며 바꿀 문자열은 오른쪽과 일치하여 캡처됩니다.
나는 PHP가 설치되어 있지 않은 내가 마지막으로 사용 된 이후 몇 년이되었습니다하지만,이 같은 일을해야 :
preg_replace_callback(
'#(?:https?:\/\/|www\.)\S+|(example(?!\.com))#i',
function ($matches) {
if ($matches[1])
return "ExamPle";
return $matches[0]; // Do not substitute
},
$message)
안녕하세요, 감사합니다. 나는 URL의 일부인 것을 대체하려고하지 않고있다. 나는 URL의 일부를 구성하지 않는 어커런스를 대체하려고 노력 중이므로 URL을 깨뜨리지 않습니다. 예를 들어 누군가가 예를 들어 바위라고 말하면 대체 될 것입니다. 만약 그들이 http://example.com이 말하면, 그것은 대체되지 않을 것입니다. –
오, 고마워, 나는이 일을 줄 것이다. 귀하의 편집 내용이 귀하가 원하는 솔루션임을 분명하게 나타냅니다. –
실제로'(?