【问题标题】:boundary not working to find particular keyword in a paragraph边界无法在段落中找到特定关键字
【发布时间】:2015-07-20 06:44:42
【问题描述】:

我想从一个段落中找出一个特定的词。我用边界来找到一个。考虑以下示例。

String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
String keyword = "Hell";
boolean matches = var.matches(".*\\b"+keyword+\\b.*");
System.out.println(matches);

当我在我的 unix 服务器上运行这段代码时,它给了我以下错误。

java.util.regex.PatternSyntaxException:索引 5 附近的转义序列非法/不受支持
.\bTMTH_EQUIP_IDLE_REASON\b.
^
在 java.util.regex.Pattern.error(Pattern.java:1713)
在 java.util.regex.Pattern.escape(Pattern.java:2177)
在 java.util.regex.Pattern.atom(Pattern.java:1952)
在 java.util.regex.Pattern.sequence(Pattern.java:1834)
在 java.util.regex.Pattern.expr(Pattern.java:1752)
在 java.util.regex.Pattern.compile(Pattern.java:1460)
在 java.util.regex.Pattern.(Pattern.java:1133)
在 java.util.regex.Pattern.compile(Pattern.java:823)
在 java.util.regex.Pattern.matches(Pattern.java:928)
在 java.lang.String.matches(String.java:2091)
在 com.acc.directory.scanner.SDScanner.main(SDScanner.java:309)

我尝试用\\\\b 替换\\b,但没有成功。它返回假。 谁能帮我解决这个问题。我到处搜索,但只给了我一个答案,用\\\\b 替换\\b,但这对我不起作用。

PS。这只是一个显示我尝试过的内容和我想要的输出的虚拟示例。我用真实数据运行我的代码,错误来自该输出。

【问题讨论】:

  • 看来你忘记了引用:boolean matches = var.matches(".*\\b"+keyword+"\\b.*");
  • 请查看第 3 行的引号。var 是什么?
  • 对不起,我在发布问题时犯了错误。但在我的代码中,这些东西是正确的。请指导我使用边界。
  • 您的异常消息与给定的代码不匹配。请提供SSCCE sscce.org
  • 这只是一个例子来展示我想要做什么。我有必须在 unix 服务器上运行的复杂数据。我收到了这种错误。所以我想知道如何解决它

标签: java regex string word-boundary


【解决方案1】:

您需要对 para 变量应用匹配函数,并且您忘记将 " 放在第二个 \\b 之前

String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
String keyword = "Hell";
boolean matches = para.matches(".*\\b"+keyword+"\\b.*");
                                               ^
System.out.println(matches);

【讨论】:

  • 对不起,我在发布问题时犯了错误。但在我的代码中,这些东西是正确的。请指导我使用边界。
  • 您是否将var 替换为para ?
  • 是的。这只是一个展示我所做的虚拟示例
【解决方案2】:

如果我将 var 替换为 para 并修复第 3 行中的引号,matches() 将返回 true:

@Test
public void testName() throws Exception
{
    String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
    String keyword = "Hell";
    boolean matches = para.matches(".*\\b"+keyword+"\\b.*");
    logger.debug(matches); 
}

输出:

08:52:18.059 [main] temp.temp - true

【讨论】:

  • 它在我的本地系统中运行良好,但在 unix 服务器中运行良好。那里给出了错误。
猜你喜欢
  • 2019-09-03
  • 1970-01-01
  • 2017-09-30
  • 2015-06-30
  • 2021-12-26
  • 2015-11-29
  • 2011-05-04
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多