2011-01-09 96 views
3

如何在正則表達式的第一次匹配之後返回? (Matcher.find()方法做到這一點嗎?)Java正則表達式在第一次匹配後返回

說我有一個字符串「abcdefgeee」。例如,我想要求正則表達式引擎在找到「e」的第一個匹配後立即找到它。我正在寫一個方法來返回true/false,如果找到了模式,我不想爲「e」找到整個字符串。 (我正在尋找一個正則表達式解決方案)

另一個問題,有時當我使用匹配(),它不會正確返回。例如,如果我編譯我的模式像「[a-z]」。然後使用matches(),它不匹配。但是,當我編譯的模式爲".*[a-z].*",它匹配....是Matcher類的matches()方法的行爲?

編輯,這裏是我想要做的。例如,我想在字符串中搜索$符號和@符號。所以我會定義2編譯模式(因爲我知道基本知識我找不到任何邏輯與正則表達式)。

pattern1 = Pattern.compiled("$"); 
pattern2 = Pattern.compiled("@"); 

然後我只想用

if (match1.find() && match2.find() ){ 
    return true; 
} 

在我的方法。

我只希望匹配器搜索字符串的第一次出現並返回。

感謝

+0

你的第一個問題是混淆你說你要返回真/假,但你說你想在找到一場比賽後停止搜索?正則表達式只是匹配或不匹配。 – jzd 2011-01-09 05:00:51

+0

對不起,我已經更新了一些問題。 – ghostdog74 2011-01-09 05:05:59

回答

2

關於第二個問題,不符合正常工作,您的示例使用兩個不同的正則表達式。

.*[a-z].*將匹配至少包含一個字符的字符串。 [a-z]只會匹配一個一個字符小寫a-z的字符串。我認爲你可能想要使用像[a-z]+

1

另一個問題,有時當我使用匹配(),它不會正確返回。例如,如果我編譯我的模式像「[a-z]」。然後使用matches(),它不匹配。但是,當我編譯模式爲「。[a-z]。」時,它匹配....是Matcher類的matches()方法的行爲?

是的,matches(...)測試整個目標字符串。

...這其實是我想要做的。例如,我想在字符串中搜索$符號和@符號。所以我會定義2編譯模式(因爲我知道基本知識我找不到任何邏輯與正則表達式)。

我知道你說你想用正則表達式,但所有的例子似乎在暗示你沒有必要爲他們:這些都是可以用一對夫婦的indexOf(...)呼叫處理所有燒毛字符。

總之,使用正則表達式,你可以做這樣的:

public static boolean containsAll(String text, String... patterns) { 
    for(String p : patterns) { 
     Matcher m = Pattern.compile(p).matcher(text); 
     if(!m.find()) return false; 
    } 
    return true; 
} 

但是,再次:indexOf(...)會做的伎倆還有:

public static boolean containsAll(String text, String... subStrings) { 
    for(String s : subStrings) { 
     if(text.indexOf(s) < 0) return false; 
    } 
    return true; 
}