正则表达式来查找和替换印度字符

时间:2019-06-04 19:47:34

标签: php regex preg-replace

我有一个如下的文本文件

{{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中而不是在标题中将所有印度字符的实例更改为等效的英语。

对于Ex:२变为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中的印度文字,而无需替换其他地方。

2 个答案:

答案 0 :(得分:1)

我们首先收集所需的,然后使用轮流收集不需要的

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

最后,我们将其替换为2$2

Demo

测试

$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 १८}}

答案 1 :(得分:1)

这是通过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