使用正则表达式搜索Unicode文本

4

在搜索写成印地语(天城文)(UTF-16)的文件时,出现了以下问题。

该文件包含:

त्रास ततत जुग नींद ना हा बु

请注意,第一个字符“त्र”是“त”+“्”+“र”的多个代码点。现在,在搜索“त”时,我得到了4个匹配项,包括第一个字符的“त”。我正在使用Java。

我应该如何搜索不是多个代码点字符的“त”?

非常感谢您的帮助。 :)

2个回答

1
你可以使用 Unicode 属性来实现这个功能,我相信。
त(?!\p{M}+)

只要不跟随任何属于M类别的代码点,即意图与其他字符组合的字符,就应该匹配त代码点。它使用负向先行断言来进行断言。

E:如果这不起作用,请尝试

\uxxxx(?!\p{M}+)

这里的xxxx是त符号代码点的数字。


0

我有点困惑...难道字形不是由多个代码点表示的吗? 但是,是的,我希望程序能够匹配字形。我正在使用java.util.regex包。 例如,对于连写字母,如 ध्वं、ल्ल्य,在使用Pattern.compile()方法将其作为输入形成正则表达式时会抛出PatternSyntaxException异常。 - user162703
在这里,每个基本字符的字形使用一个单一的代码点(与BMP中的大多数字符一样),而连字的字形则使用了几个(3个)。但是由于您无论如何都想匹配字形,所以Sean的解决方案适合您的需求。我猜Java在处理多个代码点序列时会出现问题。 - fbonnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接