Ответ 1
Карл, как вы правильно указали, любое слово на любом языке может быть допустимым хэштегом твиттера (если он соответствует ряду основных критериев). Таким образом, вы запрашиваете список действительных символов международного слова. Я уверен, что кто-то скомпилировал такой список где-то, но использование его не было бы самым эффективным подходом к достижению того, что кажется вашей первоначальной целью: обеспечение того, что данный хэштегов действителен для твиттера.
Я считаю, что вы ищете регулярное выражение, которое может соответствовать всем символам слов в пределах диапазона Unicode. Такое выражение не будет зависеть от вашего языка и будет соответствовать всем персонажам современной типографии, которые могут появляться как часть слова.
Вы не указали, на каком языке вы пишете свое приложение, поэтому я не могу помочь вам с конкретной реализацией на языке. Однако основной подход будет следующим:
-
Проверьте, не поддерживает ли какое-либо из выражений скобок или классов символов только диапазоны символов Unicode на вашем языке. Если да, то используйте их.
-
Проверьте, существует ли модификатор regex, который может поддерживать поддержку диапазона символов Unicode для вашего языка.
Большинство современных языков реализуют регулярные выражения довольно схожим образом, и многие из них сильно заимствуют у Perl, поэтому, надеюсь, следующие два примера приведут вас к правильному пути:
Perl:
Используйте выражения скобок POSIX (например: [[:alpha:]]
, [[:allnum:]]
, [[:digit:]]
и т.д.), поскольку они дают вам больший контроль над символами, которые вы хотите сопоставить, по сравнению с классами символов (например: \w
).
Используйте модификатор /u
, чтобы включить поддержку Unicode при сопоставлении шаблонов. В рамках этого модификатора платформа ASCII фактически становится платформой Unicode; и, следовательно, например, \w
будет соответствовать любому из более чем 100 000 символов слова в Юникоде.
Подробнее см. документацию Perl:
- http://perldoc.perl.org/perlre.html#Character-set-modifiers
- http://perldoc.perl.org/perlrecharclass.html#POSIX-Character-Classes
Ruby:
Используйте выражения POSIX-скобки, поскольку они включают символы, отличные от ASCII. Например, /\ d/соответствует только десятичным разрядам ASCII (0-9); тогда как /[[: digit:]]/соответствует любому символу в категории Unicode Nd.
См. документацию по Ruby для получения дополнительной информации:
<сильные > Примеры:
Учитывая список хэштегов, следующее регулярное выражение будет соответствовать всем хэштегам, начинающимся с символа слова (включая символы международного слова), за которым следует другой символ слова, число или знак подчеркивания:
m/^#[[:alpha:]][[:alnum:]_]+$/u # Perl
/^#[[:alpha:]][[:alnum:]_]+$/ # Ruby