2013-12-18 37 views
2

我需要一个正则表达式来测试某个人的可能名称。它应该包含拉丁字母,西里尔字母,空白字符和_标志。GWT的正则表达式结果不同于Java中的相同正则表达式

在Java中我写了下面的正则表达式,貌似这就是我需要:

String regex = "([\\w&&\\D]|[\\u0410-\\u044F]|[\\s])+" 

在GWT这个工程并不像预期一样:它接受#$%^ ...等标志。我必须写第一组为[a-zA-Z_]得到我想要的:字母和_标志。

而且,我修改前,有个老人正则表达式,它看起来像

String regex = "([\\w&&\\D]+|[\\u0410-\\u044F]+|[\\s]+)"; 

此基础上我的Java体验应该只接受来自拉丁字母和_标志,或词组合词合成仅为西里尔来自空白的字母或单词。但实际上在GWT中它接受所有的词,甚至&*( ......等标志。

所以问题是:

1)为什么[\\w&&\\D]并不等同于GWT [a-zA-Z_]

2)为什么GWT中的[...]+|[...]+|[...]+在Java中表现得像([...]|[...]|[...])+

回答

2

GWT生成JS,所以原因可能是JS和Java之间的正则表达式差异。

+1

是的,就是这里所说的:[RegExp(Google Web Toolkit Javadoc)](http://www.gwtproject.org/javadoc/latest/com/google/gwt/regexp/shared/RegExp.html)。 –

+0

正则表达式和数字类型是GWT编译代码的两个主要语义缺陷(在开始使用GWT时很早就学会了这一点)。在GWT中几乎没有其他的“语言/ JavaSE级别”惊喜,所以不要害怕。欲了解更多信息,请参阅http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsCompatibility.html#differences –

+0

谢谢,Petteri,但是有一些列表与这些差异的逻辑差异或一些解释? – KutaBeach