如何检查字符串是否包含某个子字符串,如[3:0]

时间:2015-09-28 11:04:04

标签: java regex string match contains

我正在开发一个项目,我需要搜索特定的字符串标记,并查找此标记是否具有[3:0]格式的数字,我该如何检查它?我搜索了堆栈溢出的参考,我可以找到如何在字符串中搜索“{my string}:”,如下所示:

String myStr = "this is {my string: } ok";
if (myStr.trim().contains("{my string: }")) {
    //Do something.
} 

但是,找不到如何搜索字符串是否包含正则表达式中的数字,我尝试使用以下内容,但它不起作用:

String myStr = "this is [3 string: ] ok";
if (myStr.trim().contains("[\\d string: ]")) {
    //Do something.
} 

请帮忙!

2 个答案:

答案 0 :(得分:1)

for "[int:int]" use \\[\\d*:\\d*\\]  it's working

答案 1 :(得分:1)

您不能在String#contains内使用正则表达式,而是使用正则表达式使用.matches()

要匹配[3 string: ] - 类似于较大字符串中的模式(其中string是字面词string),请使用(?s).*\\[\\d+\\s+string:\\s*\\].*之类的正则表达式:

String myStr = "this is [3 string: ] ok";
if (myStr.matches("(?s).*\\[\\d+\\s+string:\\s*\\].*")) {
    System.out.println("FOUND");
} 

请参阅IDEONE demo

.* + 1个或更多个数字+ 1个或更多个空格+ {{1}之前,正则表达式将匹配字符串开头的任意数字字符[(尽可能多) } +0或更多空格+ string: + 0或更多字符,直到字符串结尾。

]内部修饰符也使点匹配换行符。

注意我们双方都需要(?s),因为.*需要完整的字符串匹配。

要匹配.matches() - 类似于较大字符串中的模式,请使用:

[3:3]

请参阅another IDEONE demo

如果不允许"(?s).*\\[\\d+\\s*:\\s*\\d+\\].*" 周围的空格,请删除\\s*