У меня есть текстовый файл следующим образом
{{https://www.test.com/events/test-event-२०१८/२०१८-.१-entry-list|caption=test event of २०१८}}{{https://www.test.com/events/test-event-३१/३१-.१-entry-list|caption=test event of ३१}}{{https://www.test.com/events/test-event-१८/१८-.१-entry-list|caption=test event of १८}}
Я хочу изменить все вхождения символов знаков на их английский эквивалент только в URL (ах), а не в заголовках.
Например: २ становится 2 и так далее.Я пытаюсь написать RegEx, который заменит все экземпляры между "/" URL-адресов.Пока что мне не повезло!
<?php $pattern = "/\/([२]+)\//u"; $text=file_get_contents("Test.txt"); $text = preg_replace($pattern,'2',$text); file_put_contents("MR-Test.txt",$text); ?>
Пока что ничего не работает!
Редактировать: URL, которые я используюнаходятся в текстовом файле, и я должен заменить только индийский текст в URL-адресе, а не где-либо еще ..
Вот способ выполнить работу с preg_replace_callback, сначала найдите нужные цифры для замены, а затем замените их в обратном вызове:
$text = '{{https://www.test.com/events/test-event-२०१८/२०१८-.१-entry-list|caption=test event of २०१८}}{{https://www.test.com/events/test-event-३१/३१-.१-entry-list|caption=test event of ३१}}{{https://www.test.com/events/test-event-१८/१८-.१-entry-list|caption=test event of १८}}'; $res = preg_replace_callback('/caption=.+?}}(*SKIP)(*F)|[०१२३४५६७८९]/u', function($m) { return preg_replace( array('/०/','/१/','/२/','/३/','/४/','/५/','/६/','/७/','/८/','/९/'), array('0','1','2','3','4','5','6','7','8','9'), $m[0]); } , $text); echo $res,"\n";
Выход:
{{https://www.test.com/events/test-event-2018/2018-.1-entry-list|caption=test event of २०१८}}{{https://www.test.com/events/test-event-31/31-.1-entry-list|caption=test event of ३१}}{{https://www.test.com/events/test-event-18/18-.1-entry-list|caption=test event of १८}}
Пояснение:
caption=.+?}} # matches caption until }} (*SKIP)(*F) # and skip that match | # OR [०१२३४५६७८९] # 1 digit
Сначала мы ищем желаемое २, которое мы собираем, затем мы собираем нежелательные २ с чередованием:
२
(२)|(caption=(.+?)}})
наконец, мы заменили бы это на 2 и $2.
2
$2
$re = '/(२)|(caption=(.+?)}})/m'; $str = '{{https://www.test.com/events/test-event-२०१८/२०१८-.१-entry-list|caption=test event of २०१८}}{{https://www.test.com/events/test-event-३१/३१-.१-entry-list|caption=test event of ३१}}{{https://www.test.com/events/test-event-१८/१८-.१-entry-list|caption=test event of १८}}'; $subst = '2$2'; $result = preg_replace($re, $subst, $str); echo $result;
{{https://www.test.com/events/test-event-2०१८/2०१८-.१-entry-list|2caption=test event of २०१८}}{{https://www.test.com/events/test-event-३१/३१-.१-entry-list|2caption=test event of ३१}}{{https://www.test.com/events/test-event-१८/१८-.१-entry-list|2caption=test event of १८}}