我正在处理包含阿拉伯语类别的 url 字符串的模式匹配。
例如,在英语中,每当我看到如下内容时:
匹配模式 -> (.*)/Store/SomeThing/(.*)
我用这个模式替换它-> $1/store/something
这样
http://baseurl.com/en-gb/Store/SomeThing/WhatEver
可以没有“whatever”而变得像
http://baseurl.com/en-gb/store/something
现在,我怎样才能用阿拉伯语做这样的事情?
例如,这是我的测试:
1) 测试 url 以匹配:
1a)
http://baseurl.com/ar-gb/Store/عرمنتوات/عرع
1b)
http://baseurl.com/ar-gb/Store/عرع/عرمنتوات
如何剪切 عرمنتجات
之后的所有内容,而不考虑因为“/”也是阿拉伯字符,所以它的处理方式与其他阿拉伯字母一样?
2) 被测匹配模式:
2a)
(.*)/Store/عرمنتوات/(.*)
2b)
(.*)/Store/(.*)/عرمنتوات
2c)
(.*)/Store/عرمنتوات
::::测试结果::::
在我的测试中
(1a) 与 (2a) 和 (2c) 相匹配,两者看起来都很奇怪
(1b) 与 (2b) 匹配,但很奇怪,我本以为 (2a) 可以使用它,但没有
长话短说,这个模式匹配的等价物是什么:
- (.*)/Store/SomeThing/(.*)
在阿拉伯语中,考虑到 SomeThing 是用阿拉伯语写的?
最佳答案
这种行为可能看起来很奇怪,但嵌入在阿拉伯字母中的所有“控制字符”(不确定它们的完整列表)也是从右到左呈现的。查看您的两个示例的字节码:
/Store/عرمنتجات/عرع
2F53746F72652F D8B9D8B1D985D986D8AAD8ACD8A7D8AA 2F D8B9D8B1D8B9
|--------------| |--------------------------------| |--| |------------|
"/Store/" عرمنتجات / i عرع
/Store/عرع/عرمنتجات
2F53746F72652F D8B9D8B1D8B9 2F D8B9D8B1D985D986D8AAD8ACD8A7D8AA
|--------------| |------------| |--| |--------------------------------|
"/Store/" عرع / i عرمنتجات
/Store/عرمنتجات/whatever
2F53746F72652F D8B9D8B1D985D986D8AAD8ACD8A7D8AA 2F 7768617465766572
|------------| |------------------------------| |--| |--------------|
"/Store/" عرمنتجات / whatever
(注意:i
只是为了防止我在这里解释的渲染)
这也解释了您的测试结果。特别是它取决于 /
是否有相邻的拉丁字母。
关于c# - 从右到左语言中的正则表达式模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50570322/