我最近遇到了一些涉及Java的正則表達式引擎的奇怪行爲。正則表達式Java中的黑角...字符順序改變了正則表達式的含義?
當寫一些驗證,我需要方括號添加到我的正則表達式,像這樣:
"[^a-zA-Z0-9_/[email protected] ]" // original expression
"[^a-zA-Z0-9_/[email protected] /]/[]" // first modificiation
但是......這個實施失敗。經過實驗後,我發現如果我將空間char
移動到最後,它就會起作用。
"[^a-zA-Z0-9_/[email protected]/]/[ ]" // final working modification
現在使用這個表達式調用代碼使用的方法String.replaceAll(String, String)
,所列here。
我的問題是...有沒有人有任何好的技術理念,爲什麼放置空間改變這個正則表達式的含義?這真的沒關係。
[編輯] 從評論和答案 - 這是一個例子,其中使用內置的字符串方法導致不被捕獲的不正確的行爲。我的運行時環境根本不會抱怨,即使您閱讀了關於String.replaceAll(String, String)
的文檔,它也清楚地表明它與Pattern.compile(regex).matcher(str).replaceAll(repl)
的功能相同,我認爲我會提交一個錯誤。
** **怎麼沒有失敗?我想你會得到['PatternSyntaxException'](http://download.oracle.com/javase/7/docs/api/java/util/regex/PatternSyntaxException.html)。 –
當你寫'/]/['你想在方括號中包含字符類嗎?如果是這樣,你失敗了,因爲錯誤的轉義字符,並創建了第二個。 – stema
沒有編譯錯誤。它沒有正確捕捉括號失敗。不過,我已經修復了錯誤的語法。謝謝! – avgvstvs