栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

正则表达式:什么是InCombiningDiacriticalMarks?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式:什么是InCombiningDiacriticalMarks?

p{InCombiningDiacriticalMarks}
是Unipre块属性。在JDK7中,您将可以使用两部分表示法来编写它
p{Block=CombiningDiacriticalMarks}
,这对于读者来说可能更清楚。它在UAX#44:“
Unipre字符数据库”中进行了记录

这意味着代码点落入了一个特定范围内,即一个块,该块已被分配用于该名称的事物。这是一种不好的方法,因为不能保证该范围内的代码点是否为任何特定事物,也不能保证该块之外的代码点实质上不是同一字符。

例如,该

p{Latin_1_Supplement}
块中有拉丁字母,例如é,U + 00E9。但是,有些东西 也不是
拉丁字母。当然,到处都有拉丁字母。

积木几乎从来都不是您想要的。

在这种情况下,我怀疑您可能想使用

p{Mn}
aka
属性
p{Nonspacing_Mark}
。Combining_Diacriticals块中的所有代码点均属于此类。从Unipre
6.0.0开始,还有1087 Nonspacing_Marks 不在 该块中。

这几乎与检查相同

p{Bidi_Class=Nonspacing_Mark}
,但不完全相同,因为该组还包含了封闭标记
p{Me}
。如果两者都需要,则可以说
[p{Mn}p{Me}]
是否使用默认的Java
regex引擎,因为它仅提供对General_Category属性的访问。

您必须像Google一样使用JNI来获取ICU C ++ regex库,以便访问像之类的东西

p{BC=NSM}
,因为现在只有ICU和Perl允许访问
所有 Unipre属性。普通的Java regex库仅支持几个标准Unipre属性。不过,在JDK7 中将
支持Unipre脚本属性,这几乎绝对优于Block属性。因此,您可以在JDK7中编写
p{script=Latin}

p{SC=Latin}
或快捷方式
p{Latin}
,以从拉丁脚本中获取任何字符。这导致了 非常
普遍的需要
[p{Latin}p{Common}p{Inherited}]

请注意,这不会删除您可能会想到的所有字符中的“重音”标记!有很多它不会这样做的。例如,您无法将 Đ 转换为 D 或将 ø 转换为
o 。为此,您需要将代码点减少为与Unipre归类表中的主归类强度相同的那些。

p{Mn}
当然,失败的另一个地方当然是包含诸如的标记
p{Me}
,但也有
p{Diacritic}
一些不是标记的字符。可悲的是,您需要为此提供完整的属性支持,这意味着JNI是ICU还是Perl。恐怕Java在Unipre支持方面存在很多问题。

哦,等等,我看到你是葡萄牙语。如果您只处理葡萄牙语,那么您应该没有任何问题。

但是,我敢打赌,您并不是真的想删除重音符号,而是希望能够“不区分重音符号”来匹配内容,对吗?如果是这样,则可以使用ICU4J(Java的ICU)整理程序类进行操作。如果您以主要强度进行比较,则重音符号将不会计入。我一直这样做,因为我经常处理西班牙语文本。我有一个示例,说明如何在需要时坐在这里的西班牙人。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号