Расшифровать недопустимую проанализированную строку, например "u0627u0644u0649 u0627u0644u0623" (PHP) - PullRequest
2 голосов
/ 25 января 2020

Я обнаружил некоторые данные, которые включают такие строки, как "u0627u0644u0649 u0627u0644u0623". Обычно это больше похоже на \u0627\u0644\u0649 \u0627\u0644\u0623, но с данными что-то пошло не так. Чтобы исправить это, я могу настроить только то, что там есть.

Я не нашел ни одного случая, когда строки бывали комбинацией "u0627u0644u0623 u0644 u0627" и " нормальных слов ", но это может произойти.

Я также хочу безопасно преобразовать что-либо вроде "\u0627\u0644" или их комбинацию, чтобы строка типа «Моя строка \u0627\u0644 u0627u0644u0623 u0644 u0627." была бы преобразована правильно.

Может ли кто-нибудь порекомендовать регулярное выражение? или подходящий метод для безопасного «исправления» этих строк?

ОБНОВЛЕНИЕ

Что если мы исправим только те строки, которые были проверены в первый раз, чтобы убедиться, что они содержат только такие строки, как u0627u0644u0649 u0627u0644u0623 ? Можно ли это сделать безопасно (и как)?

Теперь я использую

^(u[A-Fa-f0-9]{4}\s?)+$

Мое регулярное выражение работает достаточно хорошо для необходимых целей. Я также согласен, что, вероятно, не существует гарантированного решения, но до сих пор это работает в моих тестовых примерах.

1 Ответ

1 голос
/ 31 января 2020

Шаблон ^(u[A-Fa-f0-9]{4}\s?)+$ не найдет совпадения с начальным пробелом.

Чтобы сопоставлять только строки, содержащие шаблоны u[A-Fa-f0-9]{4} и пробел (\s), вы можете использовать

'~^\s*u[A-Fa-f0-9]{4}(?:\s*u[A-Fa-f0-9]{4})*\s*$~'

См. Демонстрационную версию regex

Подробности

  • ^ - начало строки
  • \s* - 0+ пробелов
  • u[A-Fa-f0-9]{4} - u, а затем четыре шестнадцатеричных символа
  • (?:\s*u[A-Fa-f0-9]{4})* - 0 или более вхождений последовательностей
    • \s* - 0+ пробелов
    • u[A-Fa-f0-9]{4} - u, а затем четыре шестнадцатеричных знака
  • \s* - 0+ пробелов
  • $ - конец строки.

Вы можете сократить его до '~^\s*(u[A-Fa-f0-9]{4})(?:\s*(?1))*\s*$~' в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...