我在UnicodeSet中找到了icu4j库的Java Regular expression library benchmark类(基准测试源代码:regtest.java)。我正在尝试使用以下代码进行测试。似乎UnicodeSet具有自己的模式语法,该语法与PCRE并不完全兼容。

String exp = "^[abc]x?c$";

com.ibm.icu.text.UnicodeSet uniset = new com.ibm.icu.text.UnicodeSet("[" + exp + "]");
java.util.regex.Pattern regex = java.util.regex.Pattern.compile(exp);
System.out.println(uniset.containsAll("ac")); //Returns false
System.out.println(regex.matcher("ac").matches()); //Returns true


如何重写上面的表达式,它将与UnicodeSet一起正常工作?

我正在使用ICU4J(49.1)库。

最佳答案

UnicodeSet不是正则表达式。您的表达式[^[abc]x?c$]与许多代码点匹配,但是ac不在其中。

http://unicode.org/cldr/utility/list-unicodeset.jsp是一种在线使用UnicodeSet的方法。

您提到的基准页面应该考虑这一点。

09-13 12:41