カール、あなたが正しく指摘したように、任意の言語の任意の単語が有効な Twitter ハッシュタグになる可能性があります (いくつかの基本的な基準を満たしている限り)。そのため、あなたが求めているのは、有効な国際語の文字のリストです。誰かがそのようなリストをどこかで編集したと確信していますが、それを使用することは、最初の目標と思われるもの、つまり特定のハッシュタグが Twitter で有効であることを確認するための最も効率的な方法ではありません。
あなたが探しているのは、Unicode 範囲内のすべての単語文字に一致する正規表現だと思います。このような表現はロケールに依存せず、単語の一部として表示される最新のタイポグラフィのすべての文字に一致します。
アプリを作成する言語が指定されていないため、言語固有の実装についてお手伝いすることはできません。ただし、基本的なアプローチは次のようになります。
ブラケット式または文字クラスのいずれかが、使用している言語で既にUnicode 文字範囲をサポートしているかどうかを確認してください。はいの場合は、それらを使用してください。
お使いの言語でUnicode 文字範囲のサポートを有効にできる正規表現修飾子があるかどうかを確認してください。
最近のほとんどの言語は、かなり似た方法で正規表現を実装しており、その多くは Perl から多くを借用しているため、次の 2 つの例が正しい方向に進むことを願っています。
パール:
文字クラス[[:alpha:]]
(例[[:allnum:]]
:[[:digit:]]
\w
/u
パターン マッチング時に修飾子を使用して Unicode サポートを有効にします。この修飾子の下では、ASCII プラットフォームは実質的に Unicode プラットフォームになります。したがって、たとえば、\w
Unicode の 100,000 を超える単語文字のいずれかに一致します。
詳細については、Perl のドキュメントを参照してください。
ルビー:
ASCII 以外の文字が含まれているため、POSIX ブラケット式を使用します。たとえば、/\d/ は ASCII 10 進数 (0 ~ 9) のみに一致します。一方、/[[:digit:]]/ は Unicode Nd カテゴリの任意の文字に一致します。
詳細については、Ruby のドキュメントを参照してください。
例:
ハッシュタグのリストを指定すると、次の正規表現は、単語文字 (国際単語文字を含む) で始まり、その後に少なくとも 1 つの他の単語文字、数字、またはアンダースコアが続くすべてのハッシュタグに一致します。
m/^#[[:alpha:]][[:alnum:]_]+$/u # Perl
/^#[[:alpha:]][[:alnum:]_]+$/ # Ruby