2010-12-08 35 views
2

我有這種形式,我想從哪裏提交數據到數據庫。數據是UTF8。我在匹配換行符時遇到問題。我使用的模式是這樣的:直到用戶將新線在他的文本框中Unicode正則表達式匹配換行符?

~^[\p{L}\p{M}\p{N} ]+$~u 

這種模式正常工作。我曾嘗試在課堂內使用\p{Z},但沒有成功。我也嘗試過「,但它沒有奏效。

任何幫助,非常感謝。謝謝!

回答

3

Unicode換行符是緊接換行符的回車符,否則它是具有垂直空白字符的任何字符。

但它看起來像你試圖匹配那裏的通用空格。在Java中,這將是

[\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000] 

可以通過使用範圍爲「僅」這個被縮短:

[\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000] 

在包括水平空白(\h)和垂直空白(\v),其可以或者可能與一般空白不相同(\s)。

它也看起來像你試圖匹配字母數字。

  • 單獨使用字母通常是[\pL\pM\p{Nl}]
  • 數字並不是所有的經常都是\pN,因爲它們或者只是\p{Nd}或者有時是[\p{Nd}\p{Nl}]
  • Identifer字符需要連接器標點符號和更多,所以[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]] - 如果您的正則表達式引擎支持這些類型的操作(Java's)。這就是\w在支持Unicode的正則表達式語言(其中Java不是其中的一種)中的作用。

在舊版本的Perl,你可能會寫一個換行符作爲

(?:\r\n|\p{VertSpace}) 

雖然說現在更好寫成

(?:(?>\r\n)|\v) 

這正是

\R 

火柴。

Java在這些事情上非常笨拙。在那裏你必須寫一個linebreak作爲

(?:(?>\u000D\u000A)|[\u000A-\u000D\u0085\u2028\u2029]) 

這當然需要額外的bbaacckkssllasshheess當寫作一個字符串。

14個常見字符類正則表達式的其他Java等價性使它們能夠與Unicode一起使用我給in this answer。您可能必須使用其他類似Java的正則表達式語言,這些語言不能識別Unicode。

+0

感謝您的回答。那麼這實際上是一個「評論」的形式。用戶在那裏寫下他們的評論,並將他們存儲到數據庫中。問題是,當我試圖改變與「輸入」行正則表達式不匹配。但現在它! :) – Booya 2010-12-11 15:11:49