【发布时间】:2016-03-05 12:10:57
【问题描述】:
我遇到了一个关于 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®
如果我删除最后一个单词边界,它会再次匹配。这种行为的原因是什么?如何改进此代码以找到所有此类特殊情况?
注意:商标符号不与物品名称之间用空格隔开。
【问题讨论】:
-
是否需要保留“注册商标”或任何特殊字符?如果没有,有一些解决方案可以在解析之前将其删除。
-
不幸的是特殊字符必须保留^^
-
它总是在词尾还是可以在任何地方?而 object.getName() 是 ObjectName® 吗?
-
我可以想象一个最坏的情况,这样的字符甚至可能在任何位置。是的,object.getName() 返回字段
name -
为什么需要为此使用正则表达式?你有一个词,你想找到它是否存在?可以
Pattern.compile("\\b" + Pattern.quote(object.getName()) + "\\b", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE)吗?