2012-08-31 129 views
12

我有一個英鎊#修飾符的正則表達式。正則表達式中英鎊(#)的含義

\#在正則表達式中的含義是什麼? #在正則表達式中的含義是什麼? Java是否可能忽略這些無效的修飾符?

+0

\#不是修飾符。 – Toto

+0

不是\轉義字符嗎?不確定#的目的。 – AxGryndr

+0

它可能起源於使用'#'作爲分隔符的PCRE正則表達式。 – Joey

回答

12

\#不是有效的正則表達式修飾符。從技術上講,這是一種逃避#特性的方法,如果#意味着Java正則表達式中任何重要的東西。因爲它沒有,Java只是忽略了這個無效,並且將其作爲#讀取,而不是拋出一個錯誤。

+10

[The documentation](http://docs.oracle.com) /javase/6/docs/api/java/util/regex/Pattern.html#compile(java.lang.String))實際上解釋了這一點:「在任何不表示字符的字符之前使用反斜槓是錯誤的一個轉義構造;這些保留用於未來對正則表達式語言的擴展。反斜槓可以在非字母字符之前使用,而不管該字符是否是非轉義構造的一部分。 – millimoose

+0

@millimoose極好的發現。 – Eric

1

正如您所懷疑的那樣,這只是一個錯誤。

可以肯定的,我跑:

String quote = Pattern.quote("_#_"); 

輸出功率爲:

"\Q_#_\E" 

因此,很明顯,英鎊符號( 「#」)不是java的正則表達式特殊字符。

參見:Pattern.quote()

2

我只是有這個同樣的問題。事實證明,當將所有「舊代碼」從#更改爲|時,以前的程序員「錯過了」,這是一個簡單的錯誤。我通過檢查應用程序中的所有其他代碼發現了這一點,發現沒有其他#符號,但包含許多與|類似的代碼區域。 |就在此代碼的#的旁邊。所以有人正在換掉舊的正則表達式來換取新的正則表達式並且「錯過」了。