gpt4 book ai didi

c# - 将 Perl 正则表达式转换为 .NET

转载 作者:IT王子 更新时间:2023-10-29 04:42:01 26 4
gpt4 key购买 nike

我有一些有用的regular expressions在 Perl 中。有没有一种简单的方法可以将它们转换为 .NET 的正则表达式方言?

如果没有,是否有差异的简明引用?

最佳答案

http://www.regular-expressions.info/refflavors.html里面有个大对照表.


大部分的基本元素都是一样的,区别是:

细微差别:

  • Unicode 转义序列。在 .NET 中是 \u200A , 在 Perl 中是 \x{200A} .
  • \v在 .NET 中只是垂直制表符 (U+000B),在 Perl 中它代表“垂直空白”类。当然有\V因为这个在 Perl 中。
  • .NET 中命名引用的条件表达式是(?(name)yes|no) ,但是 (?(<name>)yes|no)在 Perl 中。

一些元素仅适用于 Perl:

  • 所有格量词( x?+x*+x++ 等)。请改用非回溯子表达式 ( (?>…))。
  • 命名的 unicode 转义序列 \N{LATIN SMALL LETTER X} , \N{U+200A} .
  • 案例折叠和转义
    • \l (下一个字符小写),\u (下一个字符大写)。
    • \L (小写),\U (大写),\Q (引用元字符)直到 \E .
  • Unicode 属性的速记符号 \pL\PL .您必须在 .NET 中包含大括号,例如\p{L} .
  • 奇怪的事情,比如 \X , \C .
  • 特殊字符类,如 \v , \V , \h , \H , \N , \R
  • 对特定或先前组的反向引用 \g1 , \g{-1} .您只能在 .NET 中使用绝对组索引。
  • 命名反向引用 \g{name} .使用 \k<name>相反。
  • POSIX 字符类 [[:alpha:]] .
  • 分支重置模式 (?|…)
  • \K .请改为使用后视 ((?<=…))。
  • 代码评估断言 (?{…}) , 延迟子表达式 (??{…}) .
  • 子表达式引用(递归模式)(?0) , (?R) , (?1) , (?-1) , (?+1) , (?&name) .
  • 一些条件表达式的谓词是特定于 Perl 的:
    • 代码 (?{…})
    • 递归 (R) , (R1) , (R&name)
    • 定义(DEFINE) .
  • 特殊回溯控制动词 (*VERB:ARG)
  • Python 语法
    • (?P<name>…) .使用 (?<name>…)相反。
    • (?P=name) .使用 \k<name>相反。
    • (?P>name) . .NET 中没有等效项。

一些元素仅适用于 .NET:

  • 后视长度可变。在 Perl 中,对于正向后视,使用 \K相反。
  • 条件表达式中的任意正则表达式 (?(pattern)yes|no) .
  • 字符类减法(未记录?)[a-z-[d-w]]
  • 平衡组 (?<-name>…) .这可以用代码评估断言来模拟 (?{…})其次是 (?&name) .

引用资料:

关于c# - 将 Perl 正则表达式转换为 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3417644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com