Perl正则表达式的方言/实现是如何调用的?

问题描述

| 用于解析字符串的引擎在Perl中称为“正则表达式”,与书籍中的“正则表达式”一词非常不同。 因此,我的问题是:是否有一些文档描述了Perl的regexp实现以及它与经典的有何不同以及在什么方面有什么不同(经典是指可以真正转换为普通DFA / NFA的正则表达式) )及其工作方式? 谢谢。     

解决方法

Perl正则表达式当然称为Perl正则表达式,或简称为regexes。它们也可以称为模式或规则。但是它们是递归下降解析器,或者至少可以是递归下降解析器。它们是使用递归回溯器实现的,但如果您希望将DFA可解决的任务卸载到DFA引擎中,则可以交换DFA引擎。 以下是有关这些问题的一些相关引文,其中包括:-我的一些胆识:   您可以通过创建正则表达式(或正则表达式)来指定模式,   以及Perl的正则表达式引擎(以下简称“引擎”)   章),然后采用该表达式并确定是否(以及如何)   模式匹配您的数据。虽然您的大部分数据可能是   文本字符串,没有什么可以阻止您使用正则表达式进行搜索   并替换任何字节序列,甚至您通常认为的那样   “二进制”数据。对于Perl,字节只是碰巧具有的字符   序数值小于256。      如果您熟悉其他地方的正则表达式,我们   应该警告您,Perl中的正则表达式有些不同。   首先,从理论上讲,它们并非完全“常规”   一词,这意味着他们可以做的比传统的常规要多得多   计算机科学课程中教授的表达方式。其次,它们被用来   在Perl中,他们经常有自己的特殊变量,运算符,   以及与该语言紧密集成的引用约定,   不像其他任何图书馆那样松散地固定。 — Larry Wall,Tom Christiansen和Jon Orwant编写的Perl编程   这是关于模式匹配的启示,通常与   我们所谓的“正则表达式”,仅与   真正的正则表达式。不过,随着   我们的模式匹配引擎的功能,因此我不会尝试   在这里应对语言的必要性。不过,我通常会称呼他们   “正则表达式”(或称“ regexen”,当我处于盎格鲁撒克逊语境时)。 — Perl6 Apocalypse 5:模式匹配,作者:Larry Wall   那里有很多新语法,所以让我们从以下开始逐步进行:
    $file = rx/ ^  <$hunk>*  $ /;
  该语句创建一个模式对象。或者,如Perl 6所述,   “规则”。人们可能仍会称它们为“正则表达式”或   “ regexes”也是如此(关键字“ 1”反映了这一点),但是Perl的模式很长   以前不再是“常规”之类的东西,因此我们将尽量避免   条款。      [更新:我们重新使用了“正则表达式”一词,以指代   一般。当我们现在说“规则”时,我们指的是那种   您将在语法中使用的正则表达式。参见S05。] — Perl6诠释5:模式匹配,作者:Damian Conway   本文档总结了Apocalypse 5,它与新的regex语法有关。   现在,我们尝试称它们为正则表达式而不是“正则表达式”,因为   他们已经很久没有使用正则表达式了,我们认为   流行术语“正则表达式”正在成为具有   精确的含义是:“您进行模式匹配的东西,有点像常规的   表达”。另一方面,重新设计的目的之一   是为了使我们的模式中的某些部分更易于分析   传统的正则表达式和解析器语义,其中涉及   仔细区分我们模式的哪些部分和   语法应视为陈述性的,哪些部分应视为程序性的。      无论如何,在语法中引用递归模式时,   术语规则和令牌通常比正则表达式更可取。 — Perl6简介5:正则表达式和规则, 达米安·康威(Damian Conway),艾莉森·兰达(Allison Randal),帕特里克·米肖(Patrick Michaud),拉里·沃尔(Larry Wall)和莫里茨·伦茨(Moritz Lenz)     ,O'Reilly的书“ Mastering Regular Expressions”(掌握正则表达式)对Perl和其他引擎有很好的解释。对我而言,这是该主题的参考书。     ,PCRE接受的语言没有正式的数学名称。 术语“带有回溯的正则表达式”或“带有反向引用的正则表达式”几乎与您将近。任何熟悉差异的人都会知道您的意思。 (只有两种常见的regexp实现类型:基于DFA和基于回溯。前者通常接受传统计算机科学意义上的“常规语言”。后者通常接受...更多,这取决于在特定的实现上,但反向引用始终是非DFA功能之一。)     ,我在理论上的CS Stack Exchange(正则表达式不是)上问了同样的问题,而投票最多的答案是“ regex”。     ,该方言称为PCRE(与Perl兼容的正则表达式)。 它记录在Perl手册中。 或在Wall,Orwant和Christiansen的“ Programming Perl”中     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...