如何在java中使用正则表达式匹配给定字符串的开头或结尾

时间:2016-01-22 05:24:49

标签: java regex

我希望在java中使用正则表达式匹配以“test”开头或结尾的字符串。

匹配字符串的开头: -       字符串a =“testsample”;

  String pattern = "^test";

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

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

匹配字符串的结尾: -       字符串a =“sampletest”;

  String pattern = "test$";

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

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

如何将正则表达式与开头或结尾相结合?

3 个答案:

答案 0 :(得分:10)

只需使用正则表达式替换运算符|

String pattern = "^test|test$";

matches方法中,它将是,

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

答案 1 :(得分: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);

答案 2 :(得分: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被搜索为一系列文字字符(这是通过{{1}实现的})。 Pattern.quote所需的^$对于matches是必需的(并且它们也不会阻止find匹配,因此,不要做任何伤害。)

另外,请注意matches DOTALL内联修饰符,使(?s)匹配任何字符,包括换行符。