как заменить данные URL в переменной - PullRequest
0 голосов
/ 17 января 2019

Как заменить раздел URL? Я пытался использовать str_replace.

Пример:

$urlTarget = 'https://www.example.net/';
$myDomain = 'https://www.mydmoain.net/';

$data = 'Some parents believe that baby walkers can help their baby's growth and development, especially helping the children to walk faster. However, is it true that baby walkers can help child development? Or even dangerous? Let's take a look at the pros and cons of baby walkers <a href="http://www.example.net/2018/01/news-doctor.html">below</a>';
$replace = str_replace($urlTarget,$myDomain,$data);

Результат:

"Some parents believe that baby walkers can help their baby's growth and development, 
especially helping the children to walk faster. However, is it true that baby walkers can help 
child development? Or even dangerous? Let's take a look at the pros and cons of baby walkers 
<a href='https://www.mydmoain.net/2018/01/news-doctor.html'>below</a>"

Я хочу удалить 2018/01/ и изменить результат на:

$data = 'Some parents believe that baby walkers can help their baby's growth and development, especially helping the children to walk faster. However, is it true that baby walkers can help child development? Or even dangerous? Let's take a look at the pros and cons of baby walkers <a href="http://www.mydmoain.net/search?q=new-doctor">below</a>';

Примечание: - Мне нужно сделать это на URL-адресах, содержащих разные даты.

1 Ответ

0 голосов
/ 17 января 2019

В этом ответе будет сделано несколько предположений, потому что вы были неточны в своем вопросе.

Я собираюсь предположить, что и исходные и нужные URL-адреса используют "http", а не "https". Вы идете вперед и назад между двумя в вашем вопросе.

Я собираюсь предположить, что атрибут href в тегах <a> заключен в двойные кавычки как в оригинале, так и в результате. Ваш вопрос содержит дубли в оригинале и синглы в результате.

Я собираюсь предположить, что, хотя ваш вопрос имеет «search? Q = new-doctor» в желаемом результате, вы на самом деле хотите «search? Q = news-doctor», когда на входе есть «news-doctor.html» «

Я предполагаю, что часть даты исходного URL-адреса всегда представляет собой год из 4 цифр, за которым следует косая черта, за которой следует месяц из 2 цифр.

Пожалуйста, при задании будущих вопросов обращайте внимание на детали, так как они имеют значение. Особенно в таких случаях, когда в этом ответе будут использоваться регулярные выражения.

Функция, которую мы собираемся использовать для получения желаемого результата: preg_replace () .

$urlTarget = "http://www.example.net";
$myDomain = "http://www.mydmoain.net";

$data = "Some parents believe that baby walkers can help their baby's growth and development, especially helping the children to walk faster. However, is it true that baby walkers can help child development? Or even dangerous? Let's take a look at the pros and cons of baby walkers <a href=\"http://www.example.net/2018/01/news-doctor.html\">below</a>";

$resultUrl = preg_replace("@".$urlTarget."/\d{4}/\d{2}/(.*)\.(.*)\"\>@", $myDomain."/search?q=$1\">", $data);

echo $resultUrl;

Распределение регулярных выражений:

@: начальный разделитель. Не используется типичный /, поэтому нам не нужно избегать косых черт в URL

$urlTarget: мы хотим сопоставлять только URL, начинающиеся с "http://www.example.net"

/\d{4}: косая черта, за которой следуют ровно 4 цифры

/\d{2}: косая черта, за которой следуют ровно 2 цифры

/(.*): косая черта, за которой следует любое количество любых символов (символы находятся в группе захвата, поэтому мы можем ссылаться на них при замене)

\.: точка (экранированная) (используется для разделения файла на имя и расширение)

(.*): любое количество любых символов (расширение "html" в вашем примере)

\">: двойная кавычка (экранированная), за которой следует больше >, чтобы поймать конец <a> тега

@: конечный разделитель

DEMO

...