我正在开发一个项目,我需要搜索特定的字符串标记,并查找此标记是否具有[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.
}
请帮忙!
答案 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]
如果不允许"(?s).*\\[\\d+\\s*:\\s*\\d+\\].*"
周围的空格,请删除\\s*
。