2010-12-02 65 views
1

正則表達式模式 - ([^=](\\s*[\\w-.]*)*$)Java的正則表達式引擎崩潰

測試字符串 - paginationInput.entriesPerPage=5

Java的正則表達式引擎崩潰/以中世紀(> 2分鐘)找到匹配。這不是爲下面的測試輸入的情況下:

paginationInput=5 

paginationInput.entries=5 

我的要求是得到的=右側字符串的保持和東西取代它。除了上面提到的輸入之外,上述模式做得很好。

我想了解爲什麼錯誤以及如何針對我的需求優化正則表達式以避免其他特殊情況。

+3

正則表達式似乎矯枉過正,你有沒有想過在這個文件的每一行使用testString.split(「=」)並檢查該長度== 2?這將返回一個數組,第二個項目將是右邊的= – 2010-12-02 05:01:42

+0

這是最簡單的方法。我將把它作爲我的最後一招。 – kaychaks 2010-12-02 05:10:29

回答

1

您可以=使用後一看後面,以確保您的字符串開始處的字符:

(?<=\\=)([\\s\\w\\-.]*)$ 

至於爲何導致崩潰,這是第二個團隊周圍有*。我不知道爲什麼你需要的,因爲這聽起來像你所要求的:

  • 單個字符,任何事情,但等於
  • 然後0或多個以下組的重複:
    • 任何的白色空間
    • 然後字字符的任何量,破折號或點串的
  • 結束量

無論如何,拿出那*,它不會永遠旋轉,但我仍然會使用背後的外觀去尋找更具體的正則表達式。

此外,我不知道你是如何使用這個,但你爲什麼在那裏有$?那麼你只能匹配字符串中的最後一個(如果你有多個)。好像你是用前瞻的新行更好末:(?=\\n|$)

[編輯]:每下面的評論更新。

0

試試這個:

=\\s*(.*)$