【问题标题】:How to find a word containing bracket "(" and using word boundaries?如何找到包含括号“(”并使用单词边界的单词?
【发布时间】:2011-03-12 08:58:16
【问题描述】:

我正在寻找一个大文本中的短语“in successes (and learn from their failures!)”。由于有括号,我使用了引号(...)来允许它,但我也想使用单词边界“\ b”,所以如果在这样的文本“亲属成功(并从他们的失败!)”。

这是我的代码:

String phrase = Pattern.quote( "in successes (and learn from their failures!)" );   
Pattern myPattern = Pattern.compile( "\\b" + phrase + "\\b" );  // Use word boundary(\b) = No letters after it.
Matcher myMatcher = myPattern.matcher( bigText );
myMatcher.find();  // Returns false.

如前所述,由于使用“\b”,此代码将返回 false。如果我省略了“\b”,匹配器将返回 true。 有没有办法在使用 2 个条件时解决这个问题:quote(...) + "\b" ?

【问题讨论】:

  • 你不应该逃避大括号 -- phrase.replace("(", "\\(")
  • @Nishan:不仅仅是牙套。它可能是 /*^$#_- 或任何其他字符。

标签: java regex word-boundaries


【解决方案1】:

我认为最好的选择是删除第二个\b

Pattern myPattern = Pattern.compile( "\\b" + phrase);

phrase!) 结尾,它们不是单词字符,应该适合所有情况,例如:failures!), and morefailures!)failures!)or not

如果你想确保它后面没有另一个字母,你可以使用"\\b" + phrase + "\\B",但我不确定这里是否需要它。

【讨论】:

  • 非常感谢,但我的问题很笼统。我有很多单词和短语要查找,所以我不希望上面的短语也获取“成功(并从失败中学习!)完成”。我希望你能明白这里的想法。这与这句话完全无关。
  • @Brad - 你可以检查 - 如果短语以 ^\b 开头,添加 "\\b" 到它,否则添加 "\\B"\b$ 也是如此。它应该能得到你想要的,我理解正确。
  • 对不起......我不明白你的想法。您能否编辑您的条目以将其转换为代码?
  • 非常感谢您的帮助。我明白你的意思,而且效果很好。
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多