这两种语言都声称使用 Perl 风格的正则表达式。如果我用一种语言测试正则表达式的有效性,它是否适用于另一种语言?正则表达式语法有何不同?
这里的用例是 C# (.NET) UI 与最终的 Java 后端实现对话,后者将使用正则表达式来匹配数据。
请注意,我只需要担心匹配,而不是提取匹配数据的部分。
最佳答案
有相当(很多)差异。
字符类
[abc-[cde]]
[abc&&[^cde]]
) [abc&&[cde]]
[abc-[^cde]]
) \p{Alpha}
POSIX 字符类(?x)
模式 COMMENTS
/ IgnorePatternWhitespace
, 字符类中的空格 (U+0020) 很重要。\p{L}
仅表格 \pL
, \p{L}
, \p{IsL}
\p{general_category=L}
, \p{gc=L}
\p{Lu}
仅表格 \p{Lu}
, \p{IsLu}
\p{general_category=Lu}
, \p{gc=Lu}
\p{IsBasicLatin}
只要。 ( Supported Named Blocks ) \p{InBasicLatin}
\p{block=BasicLatin}
, \p{blk=BasicLatin}
BasicLatin
可以写成 Basic_Latin
或 Basic Latin
)量词
?+
, *+
, ++
和 {m,n}+
(所有格量词)引述
\Q...\E
转义一串元字符\Q...\E
转义一串字符类元字符(在字符集中)匹配构造
(?(?=regex)then|else)
, (?(regex)then|else)
, (?(1)then|else)
或 (?(group)then|else)
(?<name>regex)
或 (?'name'regex)
\k<name>
或 \k'name'
(?<name>regex)
\k<name>
(?<name1-name2>regex)
或 (?'name1-name2'subexpression)
断言
(?<=text)
(正面回顾)(?<!text)
(负面回顾)模式选项/标志
ExplicitCapture
选项 (?n)
各种各样的
(?#comment)
内嵌评论引用
关于c# - Java 和 C# 正则表达式兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/538579/