1

ダッシュ付きの変数で、文字を特定のUnicode値に置き換えたいと思います。うまくいくかもしれない2つのアイデアがありますが、キャラクターの価値をチェックする方法がわかりません。

1 /変数を文字列として処理し、すべての文字値をチェックして、これらの文字を新しい変数に配置します(無効な文字を置き換えます)

2/これらの魔法を使う:-)

$variable = s/[$char_range]/-/g;

char_rangeは[0-9]または[A-Z]に似ている必要がありますが、utf-8文字の値である必要があります。正確には、0x00から0x7Fの範囲が必要です。

4

2 に答える 2

2

次の式は、ASCII 以外のものをすべてハイフンに置き換える必要があります。これは、(私が思うに) あなたがやりたいことです:

s/[\N{U+0080}-\N{U+FFFF}]/-/g
于 2012-04-06T19:41:00.693 に答える
2

UTF-8 文字のようなものはありません。UTF-8 にエンコードする文字のみがあります。それでも、Perl が認識している魔法の範囲外に範囲を作成したくはありません。期待以上のものを得られる可能性が高いです。

文字の序数値を取得するには、次を使用しますord

 use utf8;
 my $code_number = ord '';  # U+1F638

 say sprintf "%#x", $code_number;

しかし、それはあなたが必要とするものではないと思います。ASCII 範囲の文字を-. コード番号の範囲を指定できます。

 s/[\000-\177]/-/g;  # in octal
 s/[\x00-\x7f]/-/g;  # in hexadecimal

中かっこでワイド文字の序数値を指定できます。

 s/[\x80-\x{10ffff}]/-/g;  # wide characters, replace non-ASCII in this case

文字に共通のプロパティがある場合は、それを使用できます。

 s/\p{ASCII}/-/g;

ただし、文字ごとに文字を置き換える場合は、音訳が必要になる場合があります。

$string =~ tr/\000-\177/-/;
于 2012-04-06T21:14:54.503 に答える