当前位置:  开发笔记 > 编程语言 > 正文

Java和C#正则表达式是否兼容?

如何解决《Java和C#正则表达式是否兼容?》经验,为你挑选了2个好方法。

两种语言都声称使用Perl样式的正则表达式.如果我有一种语言测试正则表达式的有效性,它会在另一种语言中工作吗?正则表达式语法在哪里不同?

这里的用例是一个C#(.NET)UI,它与最终的Java后端实现进行通信,该实现将使用正则表达式来匹配数据.

请注意,我只需要担心匹配,而不是提取匹配数据的部分.



1> Drew Noakes..:

有很多(很多)差异.

角色类

    字符类减法 [abc-[cde]]

    .NET YES(2.0)

    Java的:通过字符类交集和否定仿真的:[abc&&[^cde]])

    字符类交集 [abc&&[cde]]

    .NET:通过字符类减法和否定的仿:[abc-[^cde]])

    Java 是的

    \p{Alpha} POSIX字符类

    .NET NO

    Java YES(US-ASCII)

    (?x)mode COMMENTS/下IgnorePatternWhitespace,字符类中的空格(U + 0020)很重要.

    .NET YES

    Java NO

    Unicode类别(L,M,N,P,S,Z,C)

    .NET YES:\p{L}仅限表单

    Java :

    从Java 5: ,,\pL\p{L}\p{IsL}

    从Java 7 \p{general_category=L},\p{gc=L}

    Unicode类别(Lu,Ll,Lt,...)

    .NET YES:\p{Lu}仅限表单

    Java :

    从Java 5 \p{Lu},\p{IsLu}

    从Java 7 \p{general_category=Lu},\p{gc=Lu}

    Unicode块

    .NET YES:\p{IsBasicLatin}仅限.(支持的命名块)

    Java YES :(块的名称是free-casing)

    从Java 5开始: \p{InBasicLatin}

    从Java 7 \p{block=BasicLatin},\p{blk=BasicLatin}

    所有长块名称中允许的空格和下划线(例如,BasicLatin可以写为Basic_LatinBasic Latin)

    .NET NO

    Java YES(Java 5)

量词

    ?+,*+,++{m,n}+(所有格量词)

    .NET NO

    Java 是的

行情

    \Q...\E 转义一串元字符

    .NET NO

    Java 是的

    \Q...\E 转义一串字符类元字符(在字符集中)

    .NET NO

    Java 是的

匹配构造

    有条件的匹配(?(?=regex)then|else),(?(regex)then|else),(?(1)then|else)或者(?(group)then|else)

    .NET YES

    Java NO

    命名捕获组并命名为反向引用

    .NET YES:

    捕获组:(?regex)(?'name'regex)

    反向引用:\k\k'name'

    Java YES(Java 7):

    捕获组: (?regex)

    反向引用: \k

    多个捕获组可以具有相同的名称

    .NET YES

    Java NO(Java 7)

    平衡组定义(?regex)(?'name1-name2'subexpression)

    .NET YES

    Java NO

断言

    (?<=text) (正面看后面)

    .NET 可变宽度

    Java 明显的宽度

    (? (负面的背后)

    .NET 可变宽度

    Java 明显的宽度

模式选项/标志

    ExplicitCapture 选项 (?n)

    .NET YES

    Java NO

    (?#comment) 内联评论

    .NET YES

    Java NO

参考

regular-expressions.info - 不同正则表达口味的比较

MSDN Library Reference - .NET Framework 4.5 - 正则表达式语言

模式(Java Platform SE 7)


这更加努力.;)

2> Seth..:

查看:http://www.regular-expressions.info/refflavors.html 该站点上有大量的正则表达式信息,并且有一个很好的图表,详细说明了java和.net之间的区别.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有