Совместимость regexp с ltr- и rtl-письменностями
Нужно «разобрать» по группам фразу. Фраза может быть на любом из 250 языков, в т.ч на rtl-письменности. На английском регулярка такая:
To use this application [$1|local] or [$2|global] rights is required.
^(.*?)\[\$1\|(.*?)\](.*?)\[\$2\|(.*?)\](.*?)$
Группы:
To use this application
local
or
global
rights is required.
Теперь вбиваем фразу в гугл-переводчик (чтобы не мучать подопытных арабов-тестеров) и не находим регуляркой ни-чё-го. Что делать, господа?
لاستخدام هذا التطبيق [$ 1 | محلي] أو [$ 2 | عالمي] مطلوب.
(причём в гугл-переводчике точка в конце rtl, а при копировании оказывается в начале (см. выше))
Ответы (1 шт):
На первый взгляд у вас всё правильно, просто мешают пробелы, которые появились после автоматического перевода. Ввёл ваше регулярное выражение и текст на упомянутом выше https://regex101.com/, оно не сработало, но, после того, как убрал четыре пробела, которые не соответствовали вашему регулярному выражению (между цифрой, символом «$» и следующим за ним символом «|»), регулярное выражение сработало. Единственное, что последнее слово не было подсвечено, но это похоже на недоработку самого сайта, потому что в правой части страницы показано содержимое, подошедшее под выражения в скобках, и там вроде бы все ожидаемые символы. И ещё стоит удалить пару пробелов после «|» (чтобы было как в английском). Вот пример: https://regex101.com/r/3nT6Ql/1/