【问题标题】:How to check if string contains a certain substring like [3:0]如何检查字符串是否包含某个子字符串,如 [3:0]
【发布时间】:2015-12-25 14:29:27
【问题描述】:

我正在做一个项目,我需要搜索特定的字符串标记并查找该标记是否具有 [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.
} 

请帮忙!

【问题讨论】:

  • 应该是\\[(\\d+)\\]
  • String#contains 不解析正则表达式。
  • 字符[] 在正则表达式中是特殊的。所以在String切换到合适的方法后,看看regex tag wiki,里面有很多关于正则表达式的资料。
  • 我试过但它不起作用:String myStr1 = "this is [3 string: ] ok"; if (myStr1.trim().contains("\[(\\d+) string: \]")) { //做点什么。 System.out.println("它在这里!"); }
  • 作为提示:在线尝试正则表达式解析器,例如regexr.com

标签: java regex string match contains


【解决方案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 或更多空格+string:+0 或更多空格+之前]+0 或更多直到字符串末尾的任何字符。

(?s) 内部修饰符也使点匹配换行符。

注意我们需要.*,因为.matches()需要一个完整的字符串匹配。

要匹配较大字符串中的[3:3]-like 模式,请使用:

"(?s).*\\[\\d+\\s*:\\s*\\d+\\].*"

another IDEONE demo

如果: 周围不允许有空格,请删除\\s*

【讨论】:

    【解决方案2】:
    for "[int:int]" use \\[\\d*:\\d*\\]  it's working
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2013-05-18
      相关资源
      最近更新 更多