正则表达式单词边界,Pattern.quote和括号

use*_*354 1 java regex

我正在编写一个函数,允许用户在文本字段中搜索他们可以输入的搜索词,并以某种方式标记它们,例如突出显示.我现在拥有的是:

String text = "This is my (simple) test.";
String searchExpression = "(?i)\\b(" + Pattern.quote(searchTerm) + ")\\b";
String replaceExpression = markupToken + "$1" + markupToken;
String newText = text.replaceAll(searchExpression, replaceExpression);
Run Code Online (Sandbox Code Playgroud)

如果搜索词"简单",这种方法很有用; 但是,如果用户搜索"(简单)",则无法成功匹配.如果我删除Pattern.quote或\ b,这可以正常工作.

有没有办法修改searchExpression,它将在这两种情况下都有效?

anu*_*ava 5

您的正则表达式失败,因为您不能\b在之前和之后匹配(单词边界)(,)因为这些不被视为单词字符.

你可以调整你的正则表达式:

String searchExpression = "(?i)(?<!\\w(?=\\w))(" + Pattern.quote(searchTerm) +
                          ")(?!(?<=\\w)\\w)";
Run Code Online (Sandbox Code Playgroud)

即使用任何一方的外观,这意味着如果搜索词在开头和结尾都有一个单词字符,则在模式之前和之后不应该有单词字符.