Как перевернуть текст по горизонтали?

Мне нужно написать функцию, которая будет переворачивать все символы строки слева направо.

например:

Thė quiçk rown fox jum ovểr thë lzy ȡog.

должно стать

.goȡ yzⱥl ëht rểvo ᶁềṕmuj xof nworḇ kçiuq ėhT

я могу ограничить вопрос UTF-16 (который имеет те же проблемы, что и UTF-8, только реже).

Наивное решение

Наивное решение может попытаться перевернуть все вещи (например, дословно, где слово 16-битное - я бы сказал байт за байтом , если бы мы могли предположить, что байт был 16-битным. Я мог бы также сказать символ в символ , где символ - это тип данных Char , который представляет одну кодовую точку):

String original = "ɗỉf̴ḟếr̆ęnͥt";
String flipped = "";
foreach (Char c in s)
{
   flipped = c+fipped;
}

Результаты в неверно перевернутом тексте:

  • f̴ḟếr̆ęnͥt
  • ̨tͥnę̆rếḟ̴fỉɗ

Это потому, что один «символ» занимает несколько «кодовых точек».

  • f̴ḟếr̆ęnͥt
  • ɗ f ˜ ế r ˘ ę n i t ˛

и переворачивание каждой «кодовой точки» дает:

  • ˛ t i n ę ˘ r ế ˜ f ɗ

Что не только не является допустимой кодировкой UTF-16, это не те же символы.

Ошибка

Проблема возникает в кодировке UTF-16, когда:

Те же проблемы возникают в кодировке UTF-8 с дополнительным регистром

  • любой символ за пределами диапазона 0..127 ASCII

я могу ограничиться более простой кодировкой UTF-16 (поскольку это кодировка, которую использует язык, который я использую (например, C #, Delphi)

Проблема, как мне кажется, заключается в том, чтобы определить, являются ли несколько последующих кодовых точек объединяющими символами и должны ли они идти вместе с базовым глифом.

Также интересно посмотреть онлайн-текст сайт reverser не принимает это во внимание.

Примечание:

  • любое решение должно предполагать, что у него нет доступа к библиотеке кодировки UTF-32 (в основном потому, что у меня нет доступа ни к какому UTF- 32)
  • доступ к библиотеке кодирования UTF-32 решит проблему языковых плоскостей UTF-8 / UTF-16, но не проблему объединения диакритических знаков

-121 --- 19196 06-

preg_match для HTML 5 <time datetime="«xxxx-xx-xx»"></time> Как мне сформулировать шаблон, чтобы извлечь XXXX-XX-XX из временного тега? Строка, которую я ищу в строке $, следующая:

Как бы я сформулировал шаблон, чтобы извлечь XXXX-XX-XX вне метки времени?

Строка, которую я ищу в строке $, такая:

И я хочу извлечь часть:

XXXX-XX-XX

У меня есть это, но оно не работает:

preg_match('\

Я нахожу регулярные выражения чертовски запутанными ... любая хорошая учебная рекомендация тоже будет отличной! Цените свое время и помощь.

Приветствую

0
задан Afonso Gomes 24 January 2012 в 16:05
поделиться