Сопоставление с регулярным выражением в языках справа налево - PullRequest
0 голосов
/ 28 мая 2018

Я имею дело с сопоставлением с образцом строк url, содержащих категории, на арабском языке.

Например, на английском, когда я вижу что-то вроде следующего:

сопоставление с образцом -> (.*)/Store/SomeThing/(.*)

Я заменяю его этим шаблоном -> $1/store/something

, чтобы этот

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

мог быть без «чего-либо» и становился бы

http://baseurl.com/en-gb/store/something

Теперь, как я могу сделать что-то подобное на арабском языке?

Например, вот мои тесты:

1) Тестовые URL для соответствия:

Как вырезать все, что идет после عرمنتجات,независимо от того, что «/» также является арабским символом, он обрабатывается так же, как и другие арабские буквы?

2) Соответствующие тестируемые шаблоны:

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

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

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

:::: РЕЗУЛЬТАТЫ ИСПЫТАНИЙ ::::

Во время моих тестов

  • (1a), сопоставленные с (2a) и (2c), что выглядит очень странно для обоих

  • (1b), сопоставленных с (2b)) но странно, я бы предположил (2a) работать с ним, но не

Короче говоря, что эквивалентно этому сопоставлению с шаблоном: - (.*)/Store/SomeThing/(.*) inарабский язык, учитывая, что SomeThing написано на арабском?

1 Ответ

0 голосов
/ 04 октября 2018

Такое поведение может показаться странным, но все «управляющие символы» (не уверен, каким будет их полный список), встроенные в арабские буквы, также отображаются справа налево.Посмотрите на байт-код для ваших двух примеров:

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

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

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

(примечание: i только для того, чтобы предотвратить рендеринг, который я пытаюсь объяснить здесь)

Это также объясняет ваш тестРезультаты.В частности, это зависит от того, имеет ли / латинскую букву рядом с ней или нет.

...