4

...を使用するときに正規表現に含める文字を決定するアルゴリズムに興味があり-ます...

Example: [a-zA-Z0-9]

これは、大文字と小文字、a から z、数字 0 から 9 の任意の文字に一致します。

私は当初、それらはマクロのようなもので、たとえばa-z変換などに使用されると思っていましたが、オープンソースプロジェクトa,b,c,d,eで次のようなものを見た後、

text.tr('A-Za-z1-90', 'Ⓐ-Ⓩⓐ-ⓩ①-⑨⓪')

これらはあなたの典型的な文字ではない文字であるため、正規表現に関する私のパラダイムは完全に変わりました。

私の理論では、-文字通りの意味は

左の文字と右の文字の間の任意の ASCII 値。(例 az [97-122])

私の理論が正しいかどうか誰か確認できますか? 正規表現パターンは、実際には文字コードを使用して計算されますか?

さらに、それが正しければ、次のような正規表現の一致を実行できますか?

A-z

Ais65であり、理論的には is でzあるため122 、これらの値の間のすべての文字にも一致する必要があります。

4

2 に答える 2

4

MSDNから- 正規表現の文字クラス(太字は私のものです):

文字の範囲を指定する構文は次のとおりです。

[firstCharacter-lastCharacter]

ここfirstCharacterで、 は範囲を開始する文字で、 は範囲lastCharacterを終了する文字です。文字範囲は、一連の文字の最初の文字、ハイフン ( -)、および一連の最後の文字を指定することによって定義される連続した一連の文字です。Unicode コード ポイントが隣接している場合、2 つの文字は連続しています。

したがって、あなたの仮定は正しいですが、実際には効果はより広く、ASCIIだけでなくUnicode文字コードです。

于 2013-06-21T20:05:29.417 に答える
4

あなたの仮定は両方とも正しいです。(したがって、技術的には可能であり[#-~]、大文字、小文字、数字、および特定の記号をキャプチャして有効です。)

アスキーテーブル

のように Unicode でこれを行うこともできます[\u0000-\u1000]

[A-z]ただし、大文字と小文字の間にいくつかの文字があるため (具体的には)、実行しないでください[, \, ], ^, _, `

于 2013-06-21T20:02:30.007 に答える