在Oracle Pattern documentation有三種不同的圖案的匹配空白的描述:如何選擇空白圖案?
- \ S
- \ p {空間}
- \ p {javaWhitespace}
我想知道每個人的特殊性以及如何知道如何選擇正確的人。 我剛剛注意到\p{javaWhitespace}
包含更多空間類型。
在Oracle Pattern documentation有三種不同的圖案的匹配空白的描述:如何選擇空白圖案?
我想知道每個人的特殊性以及如何知道如何選擇正確的人。 我剛剛注意到\p{javaWhitespace}
包含更多空間類型。
我寧願使用第一個。
\p{javaWhitespace}
包括FILE SEPARATOR
,GROUP SEPARATOR
,等等看this。當這些不需要時使用它可能會混淆別人。\s
是什麼,而我期望他們仔細檢查\p{javaWhitespace}
的確切定義是什麼。您不需要這樣做,因爲它會降低代碼的清晰度,並在調試過程中增加不必要的負擔。好的謝謝!在我的情況下,'\ p {javaWhitespace}'對於開發人員來說是透明的,因爲我使用'java.util.Scanner'來迭代字符串中的單詞,並且它是默認的分隔符。所以我想知道我是否應該用'.useDelimiter(「\\ s +」)來改變' – 2012-02-15 10:54:07
除非有特別原因需要使用其他選項,我會保持它的簡單和使用\s
所以'\ s'只是寫一個'\ p {Space}'的簡單方法? – 2012-02-15 10:35:38
\s
是最短的,也可以指定一個空格字符最不可移植的選項。雖然很少將Java代碼移植到其他語言,但更多的是將一個正則表達式引擎的語法知識傳遞給另一個。有很多正則表達式引擎使用Perl語法,因此在解釋上存在差異,像\s
這樣的語法會讓程序員感到困惑。
除了(ASCII 32),新行(\n
,ASCII 10),水平製表符(\t
,ASCII 9),回車(\r
,ASCII 13)和換頁(\f
,ASCII 12),有什麼是空格字符不同引擎之間沒有共識。
Java,POSIX(ASCII):還包括垂直製表符(ASCII 11)。 Java在這裏似乎遵循POSIX標準。
JavaScript(版5.1):根據規格(由字的字),除了5成常見的,它包括:
Unicode的類別Zs (Separator/Space),\u2028
(行分隔符),\u2029
(段落分隔符)。它基本上包括類別Z(分隔符)下的所有字符。
實際上\u2028
是Zl (Separator/Line)類別的唯一成員,與\u2029
是Zp (Separator/Paragraph)類別的唯一成員。根據措辭,目前版本的規格可能會排除對這兩個類別的進一步擴展。
\v
\ufeff
Perl,PCRE(ASCII模式):在Perl 5.18加入作爲實驗垂直製表\v
。在5.18之前,它只匹配5個常見的。
Perl(Unicode模式):除了5周常見的
\v
加入在Perl 5.18作爲實驗。\u0085
\u180e
.NET(默認):除了5周常見的
\v
\u0085
的Java(Unicode)的:從Java 7,圖案類包含一個新的標誌UNICODE_CHARACTER_CLASS
這使得預定義字符類和符合Unicode Technical Standard #18: Unicode Regular ExpressionPOSIX字符類。當該標誌處於活動狀態時,預定義的字符類和相應的POSIX字符類將變成等同的(匹配相同的東西)。
字符列表與.NET相同。
這足以驅動一個瘋了!
\p{Space}
是更「穩定」的選擇,因爲它遵循UNICODE_CHARACTER_CLASS
在默認模式下的POSIX standard和Unicode Technical Standard #18: Unicode Regular Expression。
如果使用POSIX字符類,符合POSIX標準的實施將在ASCII模式相同的行爲,和Unicode正則表達式引擎,遵循建議將有(幾乎)在Unicode模式相同的行爲。
\s
和\p{Space}
在Java中是等效的,無論該標誌如何。如果您在Java中使用\s
,則可以確定您正在遵循一些標準/建議。只是它沒有向大多數程序員宣佈這個事實。
\p{isJavaWhitespace}
根據Java's definition匹配空格。該函數的名稱極具誤導性。
此答案已被添加到[Stack Overflow Regular Expression FAQ](http://stackoverflow.com/a/22944075/2736496) ,在「角色類」下。 – aliteralmind 2014-04-10 00:20:37
這取決於你最清楚和最需要的東西。你是否需要它將「更多空間類型」視爲空間? – 2012-02-15 10:22:48
是的,我想用它來劃定句子中的單詞。 – 2012-02-15 10:29:53