2016-01-22 28 views
0

我想匹配一個字符串,該字符串在java中使用正則表達式開始或結束「測試」。如何使用java中的正則表達式匹配給定字符串的開始或結束

匹配字符串的開頭: - String a =「testsample」;

String pattern = "^test"; 

    // Create a Pattern object 
    Pattern r = Pattern.compile(pattern); 

    // Now create matcher object. 
    Matcher m = r.matcher(a); 

匹配字符串的結束: - 一個字符串= 「sampletest」;

String pattern = "test$"; 

    // Create a Pattern object 
    Pattern r = Pattern.compile(pattern); 

    // Now create matcher object. 
    Matcher m = r.matcher(a); 

我如何可以結合正則表達式開始或與給定的字符串結尾?

回答

6

只需使用正則表達式替換運算符|

String pattern = "^test|test$"; 

matches方法,這將是,

string.matches("test.*|.*test"); 
+0

是否有正則表達式中使用「測試」串一次的方式或內 – karan

+0

我添加的匹配方法匹配SOLN也.. –

2

使用此代碼

String string = "test"; 
String pattern = "^" + string+"|"+string+"$"; 

// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 

// Now create matcher object. 
Matcher m = r.matcher(a); 
+0

這是相同的解決方案@AvinashRaj – Jason

+0

@Jason請閱讀卡蘭 –

+0

我做的要求,並且你提出了相同的正則表達式。 – Jason

0

這裏是你如何建立一個動態的正則表達式,你可以用Matcher#find()Matcher#matches()同時使用:

String a = "testsample"; 
String word = "test"; 
String pattern = "(?s)^(" + Pattern.quote(word) + ".*$|.*" + Pattern.quote(word) + ")$"; 
// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 
// Now create matcher object. 
Matcher m = r.matcher(a); 
if (m.find()){ 
    System.out.println("true - found with Matcher"); 
} 
// Now, the same pattern with String#matches: 
System.out.println(a.matches(pattern)); 

IDEONE demo

pattern看起來像^(\Qtest\E.*$|.*\Qtest\E)$(見demo),因爲word的搜索如下的文字字符序列(這與Pattern.quote實現)。對於matches而言不需要的^$對於find是必要的(並且它們不阻止matches匹配,因此不會造成任何傷害)。

另外,還要注意的(?s) DOTALL在線修改,使一個.比賽包括一個換行符任何字符

相關問題