我希望在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);
如何将正则表达式与开头或结尾相结合?
答案 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)
匹配任何字符,包括换行符。