\w を使用したいのですが、アンダースコアにも一致するため、不必要に冗長でアメリカ中心の [A-Za-z] を使用します。これを行うより良い方法はありますか?[\w^_] のようなもの (構文が正しいとは思えません)?
7 に答える
おそらくあなたは意味し/[[:alpha:]]/
ますか?POSIX 文字クラスの議論については、perlreを参照してください。
\p{L}
「任意の Unicode 文字」を意味し、Perl で動作する ( ) を使用するだけ/\p{L}/
です。おそらくする必要がありuse utf8;
ます。
/[a-z]/i
または/[[:alpha:]]/
同様に使用できます。実際、\w
数字が含まれているため、機能しません。
国際的な (つまり、非 ASCII) 文字を一致させるのはちょっと大変で、多くのことに依存する可能性があります。この例をチェックしてください:
#!perl -w
use strict;
use utf8;
my $string = "ä";
print "matched :alpha:\n" if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n" if $string =~ /[a-z]/i;
print "matched [A-z]\n" if $string =~ /[A-z]/;
私にとって、これは
matched :alpha:
を削除するuse utf8
と、正規表現はどれも一致しません。
この非常に関連性の高い質問を見ると、おそらくUnicode::Semanticsuse utf8
をチェックアウトしたいようです。
もちろん、ストレートな ASCII 文字を使用している場合は、前述の正規表現のいずれも機能します。
[^\W0-9_]
# or
[[:alpha:]]
perldoc perlreを参照してください
いくつかのオプション:
1. /[a-z]/i # case insensitive
2. /[A-Z]/i # case insensitive
3. /[A-z]/ # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/ # POSIX alpha character class
/[a-zA-z]/
特定の言語設定を念頭に置いている場合を除き、大文字と小文字を区別しないか、 true way を使用することをお勧めします。
ノート:
- 数値 3 では、ASCII 値の順序により、最初に大文字の「A」、次に小文字の「z」が必要です。逆の場合は機能しません:
a-Z
. また、このメソッドには[ \ ] ^ _ `が含まれているため、アンダースコアなしの基準に失敗します 。 - 数字の 4 は、これらの追加の言語文字に一致しますが、次のものにも一致します:
ʹʺʻˍˎˏːˑˬˮ̀́
(および他の多くの文字)
正規表現で国際化をお探しですか?次に、この人がしたようなことをする必要があります:国際文字のJavaScript検証の問題
すべての月の言語文字に明示的に一致します:)