2017-09-05 65 views
2

我試圖匹配一個只有有效字符的字符串,並且我遇到了\ P {Cn},我理解它匹配指定的字符。我在哪裏出錯 P {Cn}?

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

在這裏,我看到0x0870-0x89F是未分配「區域」(不知道該怎麼稱呼它)。

當我測試一場比賽應該失敗對單個/多個這些字符它確實失敗"\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())。您必須告訴正則表達式引擎明確地將匹配定位在字符串的兩端。 –