Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex用于查找和替换Indic字符_Php_Regex - Fatal编程技术网

Php Regex用于查找和替换Indic字符

Php Regex用于查找和替换Indic字符,php,regex,Php,Regex,我有一个文本文件如下 {{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-lis

我有一个文本文件如下

{{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 १८}}
<?php
$pattern = "/\/([२]+)\//u";
$text=file_get_contents("Test.txt");
$text = preg_replace($pattern,'2',$text);
file_put_contents("MR-Test.txt",$text);
?>
我想将所有印度字符的实例仅在URL中而不是标题中更改为其英语等效字符

例如:२ 变成2,依此类推。我正在尝试编写一个正则表达式,它将替换URL“/”之间的所有实例。到目前为止运气不好

我的代码如下

{{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 १८}}
<?php
$pattern = "/\/([२]+)\//u";
$text=file_get_contents("Test.txt");
$text = preg_replace($pattern,'2',$text);
file_put_contents("MR-Test.txt",$text);
?>

到目前为止似乎什么都不管用


编辑:我正在使用的url位于文本文件中,我必须仅替换url中的索引文本,而不替换其他位置。

我们所需的
首先出现,我们收集它,然后收集不需要的
使用交替:

(२)|(caption=(.+?)}})
最后,我们将用
2
$2
来代替它

试验 输出
下面是一种使用preg_replace_回调执行此操作的方法,首先找到要替换的正确数字,然后在回调中替换它们:

$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
说明:

{{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

已尝试
$text=str\u替换('२', '2',$text)
还没有?
$text=strtr($text,array($text)२' => '2' ) );
也可以工作,您可以根据需要将任意多个替换项加载到该数组中。所述文本位于文本文件中的大量URL中。。我必须在“/”之间搜索,除了url@PrashantShirsat好吧,那你为什么说我们的建议失败了?你在找什么?请注意,仍可能出现误报。一个样本不足以生成一个健壮的模式谢谢!但是我不想改变标题。。只有网址!内容变为“/测试事件”०१८०१८-.१-条目列表“预期位置”/“测试-事件-2”०१८/2.०१८-.१-参赛名单“!