使用动态构建的模式将完整单词与特殊字符进行匹配



我需要在Java中匹配字符串中的精确子字符串。我试过

String pattern = "\b"+subItem+"\b";

但如果我的子字符串包含非字母数字字符,它就不起作用。我希望这与";只匹配整词";功能。你能帮忙吗?

我建议要么明确的单词边界(只有当搜索模式没有用字母、数字或下划线括起来时才匹配字符串(:

String pattern = "(?<!\w)"+Pattern.quote(subItem)+"(?!\w)";

其中,(?<!w)匹配一个前面没有单词字符的位置,如果当前位置后面没有单词字符,(?!w)将失败(请参阅此regex演示(,或者,您可以使用一个考虑潜在匹配的前导/尾随特殊字符的变体:

String pattern = "(?:\B(?!\w)|\b(?=\w))" + Pattern.quote(subword) + "(?:(?<=\w)\b|(?<!\w)\B)";

请参阅regex演示。

详细信息

  • (?:B(?!w)|b(?=w))-如果下一个字符不是单词字符,则为非单词边界;如果下一字符是单词字符,那么为单词边界
  • Data[3]-这是引用的subItem
  • (?:(?<=w)b|(?<!w)B)-如果前一个字符是单词字符,则为单词边界;如果前一字符不是单词字符,那么为非单词边界

最新更新