Шаблон Lua соответствует запятой - PullRequest
1 голос
/ 07 февраля 2012

У меня есть несколько небольших меток, таких как 'א, א' 'א, ב'. Если мы используем запятую в качестве центральной точки, мне нужно не более 2 символов перед запятой и до следующего пробела после запятой.

У меня есть (.-,.-)%s, но он не делает то, что мне нужно. Есть идеи?

Также, как вы можете видеть, здесь нет латинских букв, поэтому использование %l не будет работать.

1 Ответ

2 голосов
/ 07 февраля 2012

Здесь есть пара вопросов.Во-первых, небольшая проблема: .-, будет соответствовать как можно меньше перед комой, то есть ноль символов.Вы должны закрепить начало соответствующей строки.

Более сложная проблема заключается в том, что вы используете буквы иврита.Проблема в том, что Lua не имеет понятия многобайтовых символов.

Если вы используете 8-битную кодировку, такую ​​как Windows-1255 или ISO-8859-8, то вы, вероятно,может просто соответствовать классу персонажа [ת-א].Если вы правильно установили ивритский языковой стандарт, %l должен нормально работать для вас.

Если вы используете UTF-8 или любую другую кодировку, которая использует многобайтовые символы, то вы должны создать регулярное выражение со всемиЕврейский алфавит сбежал как последовательность октетов.Алеф U + 05D0x, который в UTF-8 будет представлен как 0xD7 0x90.Tav - это U + 05EA, который будет закодирован как 0xD7 0xAA.

В Lua вы можете экранировать любой 8-битный символ с обратной косой чертой + десятичный код.Все еврейские символы, закодированные в UTF-8, имеют первый и тот же байт - 0xD7, то есть "\215".Второй символ может быть любым от "\144" до "\170".Таким образом, регулярное выражение, которое будет соответствовать одной букве иврита: "\215[\144-\170]".Поместите это в исходное регулярное выражение, где у вас были одинарные точки, соответствующие любому символу.

Конечно, приведенные выше рассуждения должны быть изменены для кодировок, отличных от UTF-8.Надо помнить направление письма справа налево на иврите.

...