[英]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.