【问题标题】:Java and .Net Regular ExpressionsJava 和 .Net 正则表达式
【发布时间】:2012-03-28 21:28:40
【问题描述】:

Java 和 .Net Framework 正则表达式模式的区别

我正在尝试转换我的 .Net 框架,但模式无效

谁能指出正则表达式模式的主要区别

例如我们将如何命名 java 中的分组结构等。

【问题讨论】:

    标签: java vb.net regex


    【解决方案1】:

    有很多区别是summarised here

    最重要的是:

    1. 在 Java 字符串中,您需要转义所有反斜杠(@"\s" 变为 "\\s"
    2. Java 不支持命名捕获组
    3. Java 不支持在lookbehinds 中无限重复。
    4. Java 不支持条件语句 ((?(?=regex)then|else))
    5. Unicode 属性名称不同。

    大多数其他差异很小。上面没有提到的一个区别是 Java 缺乏对平衡(递归)正则表达式的支持,我希望你永远不必使用它。

    如果您需要转换大量复杂的正则表达式,请考虑投资RegexBuddy,它将为您完成。

    【讨论】:

    • 字符串问题更多是 Java 和 C# 字符串表示形式之间的差异,但在正则表达式引擎中并没有太大差异。
    【解决方案2】:

    ...和一个实用信息。我不确定“Java 不支持在lookbehinds 内无限重复”是什么意思,但是 AFAIK 和我现在所做的测试,.NET 在子字符串(某处)中寻找匹配,但 Java 需要从源头适应模式的源字符串。

    快速示例:

    task:是文件名word文件吗? (示例 demo.docx)

    .NET 解决方案: \.docx$(这将在“demo.docx”上成功,因为在文件名中的某处可以找到模式

    Java 解决方案: .*\.docx$(您需要指定前缀 .* 以确保模式可以在文件中的任何位置开始。.NET 模式在 Java 实现中不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多