【问题标题】:How do i match a specific input within a string in Java?如何在 Java 中匹配字符串中的特定输入?
【发布时间】:2015-10-21 11:00:29
【问题描述】:

我在这行代码中使用了正则表达式:

if (line.matches("^.*\b(" + incomingMachineIP + ")\b.*$"))

因此,假设以下输入:

incomingMachineIp = "10.10.10.10"

line = "abcde=10.10.10.10abcedf"

我希望 if 条件返回 true,这是我试图对上面的正则表达式执行的操作,但是即使在字符串(行)中找到了incomingMachineIp 的值,仍然返回 false

任何帮助如何解决这个问题将不胜感激。

【问题讨论】:

  • 很明显第一个.* 匹配整个字符串,所以之后找不到incomingMachineIP
  • 当传入IP为10.10.10.10,但线路有key=10.10.10.102时,确定要返回true吗?

标签: java regex eclipse


【解决方案1】:

使用实时Regex Console 来测试你的表达,直到你让它工作。请记住,在 java 中使用表达式之前,将任何单字符反斜杠“\”替换为双反斜杠字符“\\”!

【讨论】:

  • 不知道。我会发现这对将来的使用非常有帮助,所以非常感谢! :)
【解决方案2】:

在您的示例中,您可以简单地使用 line.contains(incomingMachineIP) 而根本不必处理正则表达式模式。

【讨论】:

    【解决方案3】:

    您需要再次转义反斜杠,还需要删除第二个\b 或替换为\B,因为最后一个0 和字母a 之间不存在单词边界

    if(line.matches(".*\\b" + Pattern.quote(incomingMachineIP) + ".*"))
    

    由于您使用的是matches方法,因此不需要锚点。

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多