2011-12-02 149 views
2

我已經檢查過每一個可以在這裏找到的帖子,但是無法弄清楚。正則表達式在非分隔字符串中查找帶有通配符字符串的字符串

我有一個字符串,它看起來是這樣的:「ABC1234598901AC」

我試圖用一個正則表達式匹配「5989」的字符串中,但我希望能夠到該字符串匹配連如果其中一個角色是不同的。

爲了簡化,假設我正在搜索字符串「59(不是8的隨機字符)9」。

現在這裏是我的正則表達式:「59 [^ 8] 9」,但是當我在Java中使用匹配器時,它根本就不匹配。

下面是我使用來測試這個代碼:

Matcher test = Pattern.compile("59[^8]9").matcher("ABC1234598901AC"); 

if (test.matches()) 

{ 

System.out.println(test.start()); 

System.out.println(test.end()); 

} 

Test.matches()永遠不會評估爲true。

任何幫助表示讚賞,謝謝!

+0

任何問題我的回答,這實際上* *回答您的問題(而不是到不其他反應)? – Bohemian

回答

2

您想使用test.find()而不是test.matches()

Matcher.matches()需要你的模式相匹配的整個輸入(因此你需要環繞圖案.*它匹配),而Matcher.find()搜索輸入的字符串匹配於第一(然後隨後的)子你模式。

+0

哦,我不能相信我錯過了。謝謝馬克,它解決了它!這確實解釋了爲什麼當我添加查看整個字符串時,它會返回結果。我現在還不能接受,但會在10分鐘內讓我接受。 – David

1

您可以使用和前瞻的組合OR,像這樣:

input.replaceAll(".*((?=(.989|5.89|59.9|598.))....).*", "$1"); 

這將檢索與任何一個位別的任何輸入字符串「5989」,例如,它會發現「5989 「,」3989「或」5949「而不是」5181「。

如果你不關心檢索匹配,簡單地做到這一點:

if (input.matches(".*(.989|5.89|59.9|598.).*")) { 
    // it would be true for "5989", "3989" or "5949" but not "5181" 
} 
相關問題