关于边界匹配器正则表达式( b)的以下代码段问题

关于边界匹配器正则表达式( b)的以下代码段问题,第1张

关于边界匹配器正则表达式( b)的以下代码段问题

您需要创建一个 交替组 出一套用

String.join("|", toDelete)

并用作

line = line.replaceAll("\b(?:"+String.join("|", toDelete)+")\b", "");

图案看起来像

b(?:end|something)b

请参阅regex演示。在这里,

(?:...)
是一个 非捕获
组,用于对多个备用方案进行 分组, 而无需为捕获创建内存缓冲区(由于删除了匹配项,因此不需要它)。

或者,最好在进入循环之前编译正则表达式:

Pattern pat = Pattern.compile("\b(?:" + String.join("|", toDelete) + ")\b");...    line = pat.matcher(line).replaceAll("");

更新

要允许匹配包含特殊字符的整个“单词”,您需要使

Pattern.quote
这些单词转义那些特殊字符,然后需要使用明确的单词边界,
(?<!w)
而不是使用首字母
b
来确保之前没有单词char和
(?!w)
否定的提前而不是决赛
b
,以确保比赛结束后没有单词char。

在Java 8中,您可以使用以下代码:

Set<String> nToDel = new HashSet<>();nToDel = toDelete.stream()    .map(Pattern::quote)    .collect(Collectors.toCollection(HashSet::new));String pattern = "(?<!\w)(?:" + String.join("|", nToDel) + ")(?!\w)";

正则表达式看起来像

(?<!w)(?:Q+endE|Qsomething-E)(?!w)
。注意的符号
Q
E
被解析
的文字符号



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5091738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存