gpt4 book ai didi

java - 正则表达式字边界、Pattern.quote 和括号

转载 作者:行者123 更新时间:2023-11-29 07:43:03 25 4
gpt4 key购买 nike

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

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);

如果搜索词是“简单的”,这会很有效;但是,如果用户搜索“(simple)”,它将不会成功匹配。如果我删除 Pattern.quote 或\b's 这工作正常。

有没有办法修改 searchExpression 使其在这两种情况下都适用?

最佳答案

您的正则表达式失败,因为您无法匹配 () 前后的 \b(单词边界),因为这些不被考虑单词字符。

您可以像这样调整您的正则表达式:

String searchExpression = "(?i)(?<!\\w(?=\\w))(" + Pattern.quote(searchTerm) +
")(?!(?<=\\w)\\w)";

即在两侧使用环视,这意味着如果搜索词的开头和结尾有单词字符,则模式前后不应有单词字符。

关于java - 正则表达式字边界、Pattern.quote 和括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com