当前位置: 首页 > 面试题库 >

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

夏侯枫
2023-03-14
问题内容

两种语言都声称使用Perl样式正则表达式。如果我使用一种语言测试正则表达式的有效性,那么它是否可以在另一种语言中工作?正则表达式语法在哪些方面有所不同?

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

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


问题答案:

有很多差异。

角色类

  1. 人物类减法 [abc-[cde]]
    • .NET 是(2.0)
    • Java的:通过字符类交集和否定仿真的:[abc&&[^cde]]
  2. 人物类交集 [abc&&[cde]]
    • .NET:通过字符类减法和否定的仿:[abc-[^cde]]
    • Java
  3. \p{Alpha} POSIX字符类
    • .NET
    • Java 是(US-ASCII)
  4. (?x)模式COMMENTS/下IgnorePatternWhitespace,字符类中的空格(U + 0020) 有效
    • .NET
    • Java
  5. Unicode类别(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}
  6. Unicode类别(Lu,Ll,Lt等)
    • .NET \p{Lu}仅表单
    • Java 是的
    • 从Java 5 \p{Lu}\p{IsLu}
    • 从Java 7 \p{general_category=Lu}\p{gc=Lu}
  7. Unicode块
    • .NET \p{IsBasicLatin}仅。(支持的命名块)
    • Java :(块名称为自由套管)
    • 从Java 5: \p{InBasicLatin}
    • 从Java 7 \p{block=BasicLatin}\p{blk=BasicLatin}
  8. 所有长块名中都允许使用空格和下划线(例如,BasicLatin可以写为Basic_LatinBasic Latin
    • .NET
    • Java (Java 5)

量词

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

报价单

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

匹配结构

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

断言

  1. (?<=text) (正向后看)
    • .NET 可变宽度
    • Java 明显宽度
  2. (?<!text) (负向后看)
    • .NET 可变宽度
    • Java 明显宽度

模式选项/标志

  1. ExplicitCapture 选项 (?n)
    • .NET
    • Java

  1. (?#comment) 内联评论
    • .NET
    • Java

参考文献

  • regular-expressions.info-不同正则表达式风味的比较
  • MSDN库参考-.NET Framework 4.5-正则表达式语言
  • 模式(Java Platform SE 7)


 类似资料:
  • 主要内容:正则表达式的组成,Regex 类正则表达式是一种匹配输入文本的模式,可以用于解析和验证给定文本以及模式之间是否匹配,模式可以包含运算符、字符字面值或结构。 正则表达式的组成 我们可以使用正则表达式检查给定字符串是否与指定模式相匹配。正则表达式的匹配模式由一系列字符组成,其中可以包括数子、文字、运算符、字符等等。我们可以使用这些模式来搜索字符串或文件,并查看是否找到了匹配的项。 开发中我们一般使用正则表达式来验证用户输入的信息是否

  • 问题内容: 我必须在Python中基于PCRE解析一些字符串,而且我不知道该怎么做。 我要解析的字符串如下所示: 在此示例中,我必须获得以下不同项: 我发现与Python中的PCRE操作有关的唯一内容是以下模块:http : //pydoc.org/2.2.3/pcre.html(但它被编写为.so文件…) 您知道是否存在一些Python模块可以解析这种字符串吗? 问题答案: Python如何处理

  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone

  • 主要内容:正则表达式支持字符正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为 regex、regexp 或 RE,它是计算机科学的一个概念。 正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作,是一种可以用于模式匹配和替换的规范。一个正则表达式就是由普通的字符(如字符 a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的

  • 正则表达式是一种可以和输入文本相匹配的表达式。.Net framework 提供了一个正则表达式引擎让这种匹配成为可能。一个表达式可以由一个或多个字符,运算符,或结构体组成。 构建正则表达式的定义 有很多种类的字符,运算符,结构体可以定义正则表达式。 转义字符 字符类 集合 分组构造 限定符 回溯引用构造 可替换结构 替换 混合结构 Regex 正则表达式类 Regex 类用于表示一个正则表达式。

  • 问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使