2017-09-05 26 views
2

私は有効な文字だけを持つ文字列にマッチさせようとしていました。割り当てられた文字と一致することを理解している\ P {Cn}を見つけました。ここで P {Cn}のどこが間違っていますか?

https://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF

私は(それを呼び出すことはわからない)0x0870-0x89Fが割り当てられていない「地域」でご覧ください。

これらの文字の1つまたは複数の文字に対して一致が失敗すると、実際には"\u0880"が失敗しますが、割り当てられた文字が"\u0880 letters"の場合は一致しません。

この状況について私は誤解している可能性がありますか?私は知っていただければ幸いです!

数量詞と

答えて

1

使用アンカー:

^\P{Cn}*$ 

か - あなたは空の文字列に一致しない場合:

^\P{Cn}+$ 

それは一致します

  • ^を - 開始文字列
  • \P{Cn}* - Cnカテゴリ以外の任意の0以上の文字
  • $ - 文字列の最後(または末尾に一致するように\z)。
+0

これは私の問題を修正しました。ありがとうございます!しかし、私はまだアンカーが違いを生み出した理由についてはまだ分かりません。なぜなら、\ P {Cn} *はアンカーなしで_fail_をマッチさせるには不十分なのです。 –

+0

@lilah 'Regex.IsMatch'メソッドは、文字列全体が一致することを保証しません(Javaの' String#matches'やPython 3の 're.fullmatch()'と違って)。文字列の両端にマッチを明示的に固定するように正規表現エンジンに指示する必要があります。 –

関連する問題