繁体   English   中英

具有异常unicode字符和单词边界的RegEx模式

[英]RegEx pattern with unusual unicode character and word boundaries

我遇到有关RegEx模式的问题,希望有人能向我解释一下:

任务是匹配对象名称,并将其从存储在对象字段之一中的描述中删除。 我尝试了以下表达式:

    final String description= object.getDescrition();
    final Matcher descriptionMatcher=
        Pattern.compile("\\b" + object.getName() + "\\b", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE)
            .matcher(description);

一切正常,直到代码遇到添加到名称的“注册商标”符号为止: String name = ObjectName®

如果我删除了最后一个单词的边界,它将再次匹配。 出现这种现象的原因是什么,如何改进此代码以找到每种特殊情况?

:该商标标志从通过空间对象名称分开。

在这种情况下,请将您的模式更改为:

"\\b\\Q" + object.getName() + "\\E(?<=\\b|®)"

如果您需要处理更复杂的情况,请在环顾四周使用替代字词,而不要使用单词边界。 例:

"(?<=\\s|^)\\Q" + object.getName() + "\\E(?=\\s|$)"

要么

"(?<=\\s|^)" + Pattern.quote(object.getName()) + "(?=\\s|$)"

®字符不被视为文字字符,因此您的Pattern将不匹配。

如果只有这种情况,一种快速而肮脏的解决方案是将它与单词border交替使用:

Pattern.compile("\\b" + object.getName() + "\\b|®"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM