16

\w を使用したいのですが、アンダースコアにも一致するため、不必要に冗長でアメリカ中心の [A-Za-z] を使用します。これを行うより良い方法はありますか?[\w^_] のようなもの (構文が正しいとは思えません)?

4

7 に答える 7

16

おそらくあなたは意味し/[[:alpha:]]/ますか?POSIX 文字クラスの議論については、perlreを参照してください。

于 2010-09-20T18:03:27.753 に答える
13

\p{L}「任意の Unicode 文字」を意味し、Perl で動作する ( ) を使用するだけ/\p{L}/です。おそらくする必要がありuse utf8;ます。

于 2010-09-20T19:07:21.503 に答える
8

/[a-z]/iまたは/[[:alpha:]]/同様に使用できます。実際、\w数字が含まれているため、機能しません。

于 2010-09-20T18:04:24.303 に答える
8

国際的な (つまり、非 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 文字を使用している場合は、前述の正規表現のいずれも機能します。

于 2010-09-20T18:50:03.010 に答える
6
[^\W0-9_]

# or

[[:alpha:]]

perldoc perlreを参照してください

于 2010-09-20T18:04:05.680 に答える
4

いくつかのオプション:

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 は、これらの追加の言語文字に一致しますが、次のものにも一致します:
    ʹʺʻˍˎˏːˑˬˮ̀́   (および他の多くの文字)
于 2010-09-20T18:23:03.717 に答える
0

正規表現で国際化をお探しですか?次に、この人がしたようなことをする必要があります:国際文字のJavaScript検証の問題

すべての月の言語文字に明示的に一致します:)

于 2010-09-20T18:06:56.297 に答える