2016-08-17 8 views
1

Я пытаюсь написать функцию в php, где я хочу заменить все вхождения «www». с "http://www.".Заменить все вхождения в строке, кроме тех, которые начинаются с «http» или «https» с помощью php

$text = preg_replace("www\.", "http://www.", $data); 

Я попытался с помощью этого кода, но я не хочу, чтобы строка «http://www.» для превращения в «http://http://www.».

Любые предложения?

ответ

3

Добавьте ^ якорь вы Regex:

$text = preg_replace("/^www\./", "http://www.", $data); 
        ^-- this one 

NB: возражаете регулярное выражение разделителей (/.../) в параметре шаблона.

Это начало строчных привязок для обеспечения замены строки www. в начале строки $data. Это позволит предотвратить любые нежелательные замены в середине строки, как это: redirector.com/?www.stackoverflow.com

+0

Из курс! Благодаря! – martenolofsson

1

Вы можете достичь этого с отрицательным просмотром назад:

'~(?<!://)www\.~' 

См regex demo

(?<!://) просмотра назад будет провалить матч если www. предшествует ://, избегая при этом матча http://www. и https://www..

Если вы действительно хотите, чтобы избежать сопоставления строк, которые имеют http:// только добавить http или \bhttp перед : и использовать '~(?<!http://)www\.~'

0

Попробуйте это. Это будет проверять не только HTTP, но и другие протоколы, такие как HTTPS, FTP и т.д.

function addPrefix($url) { 
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { 
     $url = "http://" . $url; 
    } 
    return $url; 
} 

echo addPrefix("http://ww.google.com"); 
0

Вы можете попробовать отрицательный: 'назад

(?!http://)www\. 
0

Попробуйте этот упрощенный код

i.e $url='www.xyz.com'; 
      function urlModified($patterns, $replace, $url) 
      { 
       $patterns = array ('http://www.'); 
       $replace = array ('/^www\./'); 
       preg_replace($patterns, $replace, $url); 
       return $url; 
      } 
Смежные вопросы