Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从假名脚本中排除Unicode日语延长音标?_Java_Regex_Unicode_Cjk - Fatal编程技术网

Java 从假名脚本中排除Unicode日语延长音标?

Java 从假名脚本中排除Unicode日语延长音标?,java,regex,unicode,cjk,Java,Regex,Unicode,Cjk,我正试图通过删除特殊字符来生成slug来清除字符串。也就是说,我想保留CJK字符,否则这些语言将一无所获 因此,我有一个正则表达式,它应该通过列出脚本来保留CJK字符: "[^-_.\\w-\\p{script=Han}\\p{script=Hira}\\p{script=Kana}\\p{script=Hang}]" 问题是,片假名延长了音标“ー" 似乎被排除在外 下面是显示问题的代码: 它不在我列出的脚本中吗 编辑:好的,如果你愿意,在这里编码,但是它没有提供比正则表达式本身更多的信息

我正试图通过删除特殊字符来生成slug来清除字符串。也就是说,我想保留CJK字符,否则这些语言将一无所获

因此,我有一个正则表达式,它应该通过列出脚本来保留CJK字符:

"[^-_.\\w-\\p{script=Han}\\p{script=Hira}\\p{script=Kana}\\p{script=Hang}]"
问题是,片假名延长了音标“ー" 似乎被排除在外

下面是显示问题的代码:

它不在我列出的脚本中吗

编辑:好的,如果你愿意,在这里编码,但是它没有提供比正则表达式本身更多的信息。它非常有用,所以人们可以尝试

package com.example;

class Hello {
    public static void main(String[] args) {
        String input = "%;アレルギー[]abcd";
        String output= input.replaceAll("[^-_.\\w-\\p{script=Han}\\p{script=Hira}\\p{script=Kana}\\p{script=Hang}]", "");
        System.out.println(output);
    }
}

为了避免匹配该字符,应该将其添加到否定类中

"[^-_ー.\\w-\\p{script=Han}\\p{script=Hira}\\p{script=Kana}\\p{script=Hang}]"

不,事实上,它不在列出的脚本中。将此字符放置在
公用
脚本中

在Unicode中应该区分“脚本”和“块”。该字符属于片假名块,以及其他一些非字母的字符,如“片假名迭代标记”(
\u30fd
),但它不属于片假名脚本。片假名脚本中只有实际的音节

您可以做的一件事是将
脚本
指示替换为
,用于
片假名

output = input.replaceAll("[^-_.\\w-\\p{script=Han}\\p{script=Hira}\\p{block=Katakana}\\p{script=Hang}]", "");
这种情况下的输出将包括延长的声音标记

或者你可以这样做:

Matcher m = Pattern.compile("[^-_.\\w]",Pattern.UNICODE_CHARACTER_CLASS).matcher(input);
output = m.replaceAll("");
此模式将匹配所有语言中的所有单词字符,包括但不限于日语

对于输入字符串
“%;アレルギー[]{}=abceⸯD漢字这将产生

アレルギーabceⸯd漢字ру́сский アレルギーabceⸯD漢字ру́сский 鉴于我的第一个建议,即带有块的建议,输出将是:

アレルギーabced漢字 アレルギー放弃漢字
因此,如果您只想限制为日语(和韩语),我的第一个建议可能更适合您,而如果您想要所有国际单词字符,第二个会更好。

它在\p{Lm}类别,请参阅。将字符添加到否定字符类是否解决了问题?确切的问题是什么?Stribizev是的,解决了它。谢谢!请注意,有许多非日语字符与
\p{Lm}
类别匹配。@erwan.作为答案发布。或
\\p{InKatakana}
-谢谢你对我以前的回答所作的评论。谢谢,这实际上是最好的回答。我用日语回答这个问题,因为我懂日语,但我们有许多其他非拉丁语的用户,他们会很乐意保留这些单词。