草庐IT

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

coder 2023-07-12 原文

我有一些有用的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/

有关c# - 将 Perl 正则表达式转换为 .NET的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  5. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  6. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  7. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  8. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  9. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  10. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

随机推荐