从右到左语言的正则表达式模式匹配

时间:2018-05-28 16:23:46

标签: c# regex string arabic right-to-left

我正在处理包含阿拉伯语类别的网址字符串的模式匹配。

例如,在英语中,只要我看到以下内容:

匹配模式 - &gt; <button id="3days" type="button" ng-click="$ctrl.dayChanger(3)">3 days</button>

我用这种模式替换它 - &gt; (.*)/Store/SomeThing/(.*)

这样

$1/store/something

可能没有&#34;无论什么&#34;并变得像

http://baseurl.com/en-gb/Store/SomeThing/WhatEver

现在,我怎么能用阿拉伯语做这样的事呢?

例如,这是我的测试:

1)测试网址匹配:

  • 1a)http://baseurl.com/en-gb/store/something

  • 1b)http://baseurl.com/ar-gb/Store/عرمنتجات/عرع

如何切割http://baseurl.com/ar-gb/Store/عرع/عرمنتجات之后的所有内容,无论是什么,因为&#34; /&#34;也是一个阿拉伯字符,它像其他阿拉伯字母一样处理?

2)测试中的匹配模式:

  • 2a)عرمنتجات

  • 2b)(.*)/Store/عرمنتجات/(.*)

  • 2c)(.*)/Store/(.*)/عرمنتجات

:::: TEST RESULTS ::::

在我的测试期间

  • (1a)与(2a)和(2c)相匹配,两者看起来都很奇怪

  • (1b)与(2b)匹配,但很奇怪,我会假设(2a)与它一起工作,但不是

长话短说,这个模式匹配的等价物是什么: - (.*)/Store/عرمنتجات 考虑到SomeThing是用阿拉伯语写的,用阿拉伯语写的?

1 个答案:

答案 0 :(得分:0)

这种行为可能看起来很奇怪,但是嵌入在阿拉伯字母中的所有“控制字符”(不确定它们的完整列表)也会从右向左呈现。查看两个示例的字节码:

/Store/عرمنتجات/عرع
 2F53746F72652F   D8B9D8B1D985D986D8AAD8ACD8A7D8AA   2F   D8B9D8B1D8B9
|--------------| |--------------------------------| |--| |------------|
  "/Store/"                   عرمنتجات               /  i    عرع

/Store/عرع/عرمنتجات
 2F53746F72652F   D8B9D8B1D8B9   2F   D8B9D8B1D985D986D8AAD8ACD8A7D8AA
|--------------| |------------| |--| |--------------------------------|
  "/Store/"           عرع        /  i              عرمنتجات

/Store/عرمنتجات/whatever
2F53746F72652F D8B9D8B1D985D986D8AAD8ACD8A7D8AA  2F  7768617465766572
|------------| |------------------------------| |--| |--------------|
  "/Store/"                عرمنتجات              /        whatever

(注意:i只是为了防止在此处尝试解释的渲染内容)

这也说明了您的测试结果。具体来说,这取决于/是否有相邻的拉丁字母。