c# - 从右到左语言中的正则表达式模式匹配

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

我正在处理包含阿拉伯语类别的 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/

相关文章:

c# - 使用 Dapper.net 进行多映射查询的意外行为

java - 使用正则表达式去除所有不情愿的花括号

c - 如何在C中用多个字符替换字符串char指针中的字符?

javascript - 将字符串格式日期从 html 发送到 javascript 函数。 Javascript 只收到不同的年份

c# - 生成器模式 : What is the purpose of the Director?

c# - 如何为帖子添加标签?

c# - 使用 Assembly.Load、Assembly.LoadFile 为插件正确加载依赖项

javascript - 解析 CSS 背景图像

python - 使用正则表达式改进 html 代码中的过滤器链接

c - 确定字符串是否为 C 中的有效 wchar_t*