Regex для поиска и замены символов индикатора - PullRequest
3 голосов
/ 04 июня 2019

У меня есть текстовый файл следующим образом

{{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-адресов.Пока что мне не повезло!

1007 * Мой код выглядит следующим образом
<?php
$pattern = "/\/([२]+)\//u";
$text=file_get_contents("Test.txt");
$text = preg_replace($pattern,'2',$text);
file_put_contents("MR-Test.txt",$text);
?>

Пока что ничего не работает!

Редактировать: URL, которые я используюнаходятся в текстовом файле, и я должен заменить только индийский текст в URL-адресе, а не где-либо еще ..

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вот способ выполнить работу с 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
1 голос
/ 04 июня 2019

Сначала мы ищем желаемое , которое мы собираем, затем мы собираем нежелательные с чередованием:

(२)|(caption=(.+?)}})

наконец, мы заменили бы это на 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 १८}}
...