Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 Scala REPL中的Unicode正则表达式_Java_Regex_Scala_Unicode_Read Eval Print Loop - Fatal编程技术网

Java Scala REPL中的Unicode正则表达式

Java Scala REPL中的Unicode正则表达式,java,regex,scala,unicode,read-eval-print-loop,Java,Regex,Scala,Unicode,Read Eval Print Loop,我想检测Unicode字母的单词(\p{L}) Scala的REPL为以下语句返回false,而在Java中为true(这是正确的行为): java.util.regex.Pattern.compile(“\\p{L}”).matcher(“ä”).matches() Java和Scala都在JRE 1.7中运行: System.getProperty(“java.version”)返回“1.7.0\u 60-ea” 原因可能是什么?可能是解释器中使用的不兼容字符编码。例如,以下是我的输出: s

我想检测Unicode字母的单词(
\p{L}

Scala的REPL为以下语句返回
false
,而在Java中为
true
(这是正确的行为):

java.util.regex.Pattern.compile(“\\p{L}”).matcher(“ä”).matches()

Java和Scala都在JRE 1.7中运行:

System.getProperty(“java.version”)
返回
“1.7.0\u 60-ea”


原因可能是什么?

可能是解释器中使用的不兼容字符编码。例如,以下是我的输出:

scala> System.getProperty("file.encoding")
res0: String = UTF-8

scala> java.util.regex.Pattern.compile("\\p{L}").matcher("ä").matches()
res1: Boolean = true
因此,解决方案是使用
-Dfile.encoding=UTF-8
运行
scala
。但是请注意,(这有点旧):

我们找到的唯一可靠的设置默认字符的方法 Scala的编码是在运行 应用程序:

$JAVA_OPTS=“-Dfile.encoding=utf8”scala
[...] 仅仅尝试设置scala-Dfile.encoding=utf8似乎不起作用。[……]


这里的情况并非如此,但也可能发生:或者,您的“ä”可以是后面跟着“a”的符号,例如:

这有时是一些系统的一个问题,这些系统通过创建变音符号(我认为OSX就是一个问题,至少在某些版本中是如此)。有关详细信息,.

您还可以“启用预定义字符类和POSIX字符类的Unicode版本”,如和中所述

这意味着您可以使用诸如“\w”之类的字符类来匹配Unicode字符,如下所示:

"(?U)\\w+".r.findFirstIn("pässi")
在上面的regexp中,“(?U)”位是一个嵌入的标志表达式,它为regexp打开UNICODE_字符_类标志


从Java 7开始就支持此标志。

请参阅为什么您的正则表达式不够充分。您需要
\p{L}\p{M}*
+1。我没有考虑过,就是这样。code>scala>System.getProperty(“file.encoding”)为我提供了
res0:String=Cp1252
,因为我在Windows上。谢谢你提供的信息。@pvorb:谢谢你提供的信息,我将编辑这篇文章,相应地突出显示“主要”解决方案。
"(?U)\\w+".r.findFirstIn("pässi")