c# - Java 和 C# 正则表达式兼容吗?

标签 c# java .net regex

这两种语言都声称使用 Perl 风格的正则表达式。如果我用一种语言测试正则表达式的有效性,它是否适用于另一种语言?正则表达式语法有何不同?

这里的用例是 C# (.NET) UI 与最终的 Java 后端实现对话,后者将使用正则表达式来匹配数据。

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

最佳答案

有相当(很多)差异。

字符类

  • 字符类减法[abc-[cde]]
  • .NET 是 (2.0)
  • Java:通过字符类交集和否定模拟:[abc&&[^cde]] )
  • 字符类交集[abc&&[cde]]
  • .NET:通过字符类减法和否定模拟:[abc-[^cde]] )
  • Java
  • \p{Alpha} POSIX 字符类
  • .NET
  • Java 是 (US-ASCII)
  • (?x)模式 COMMENTS / IgnorePatternWhitespace , 字符类中的空格 (U+0020) 很重要。
  • .NET
  • Java
  • Unicode Category (L, M, N, P, S, Z, C)
  • .NET :\p{L}仅表格
  • Java :
  • 从 Java 5:\pL , \p{L} , \p{IsL}
  • 从 Java 7:\p{general_category=L} , \p{gc=L}
  • Unicode Category (陆,Ll,Lt,...)
  • .NET :\p{Lu}仅表格
  • Java :
  • 从 Java 5:\p{Lu} , \p{IsLu}
  • 从 Java 7:\p{general_category=Lu} , \p{gc=Lu}
  • Unicode Block
  • .NET :\p{IsBasicLatin}只要。 ( Supported Named Blocks )
  • Java :(块的名称是自由套管)
  • 从 Java 5:\p{InBasicLatin}
  • 从 Java 7:\p{block=BasicLatin} , \p{blk=BasicLatin}
  • 所有长块名称中都允许使用空格和下划线(例如 BasicLatin 可以写成 Basic_LatinBasic Latin )
  • .NET
  • Java (Java 5)

  • 量词
  • ?+ , *+ , ++{m,n}+ (所有格量词)
  • .NET
  • Java

  • 引述
  • \Q...\E转义一串元字符
  • .NET
  • Java
  • \Q...\E转义一串字符类元字符(在字符集中)
  • .NET
  • Java

  • 匹配构造
  • 条件匹配(?(?=regex)then|else) , (?(regex)then|else) , (?(1)then|else)(?(group)then|else)
  • .NET
  • Java
  • 命名捕获组和命名反向引用
  • .NET :
  • 捕获组:(?<name>regex)(?'name'regex)
  • 反向引用:\k<name>\k'name'
  • Java ( Java 7 ):
  • 捕获组:(?<name>regex)
  • 反向引用:\k<name>
  • 多个捕获组可以具有相同的名称
  • .NET
  • Java (Java 7)
  • 平衡组定义 (?<name1-name2>regex)(?'name1-name2'subexpression)
  • .NET
  • Java

  • 断言
  • (?<=text) (正面回顾)
  • .NET 可变宽度
  • Java 明显宽度
  • (?<!text) (负面回顾)
  • .NET 可变宽度
  • Java 明显宽度

  • 模式选项/标志
  • ExplicitCapture 选项 (?n)
  • .NET
  • Java

  • 各种各样的
  • (?#comment)内嵌评论
  • .NET
  • Java

  • 引用
  • regular-expressions.info - Comparison of Different Regex Flavors
  • MSDN Library Reference - .NET Framework 4.5 - Regular Expression Language
  • Pattern (Java Platform SE 7)
  • 关于c# - Java 和 C# 正则表达式兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/538579/

    相关文章:

    .net - 调用 .NET WinForms 事件处理程序的时机

    .net - 将旧版 VB6 函数调用转换为 .NET 的实用程序

    java - 合并两个具有不同 persistence.xml 配置的项目?使用 EclipseLink 而不使用 JPA?

    java - 计算质数直到 N

    c# - 如何为加密算法创建加密 key ?

    c# - 解析 XML 文件 - 选项?

    c# - 数据类型不匹配

    c# - 无法从 double[][] 转换为 double[*,*]

    c# - 匿名并行任务计时器?

    java - 在随机位置用固定数量的宝藏填充二维字符数组