regex - 如何调用正则表达式的内部部分? (由分隔符分隔的那个)

标签 regex coding-style delimiter bnf

如何在没有分隔符的情况下调用正则表达式的“内部部分”?

例如:

给定这些正则表达式:/\d+/#(hello)#,我们可以将每个正则表达式分为 3 部分:

  • / + \d+ + /
  • # + (你好) + #

我们都将分隔符命名为 /#

如何称呼内部部分? \d+(hello) 部分?

在此 BNF https://www2.cs.sfu.ca/~cameron/Teaching/384/99-3/regexp-plg.html此处引用https://stackoverflow.com/a/265466/1315009似乎他们将内部称为“正则表达式”。如果这是真的,那么如何调用连接有分隔符的正则表达式呢?

提出这个问题的原因是清洁代码规则。我正在编写一个分词器,我需要用适当的名称清楚地命名“完整的东西”和“内部的东西”。

最佳答案

regex delimiters delimit the following parts :

<action>/<pattern>(/<substituiton>)/<modifiers>

行动

正则表达式分隔符构造的这一部分包含有关正则表达式将执行的操作的隐式(无字符)或显式(用字符表示)信息:匹配、替换,有时甚至即使它将对整个文件起作用就像在 Vim 中一样。操作也称为 commands (或 operators )在 POSIX 工具上下文中。常用的操作字符是 sm,分别代表 substitution 和 match。

模式 第二部分,您将其称为内部部分 - 称为模式(请参阅 perlop reference )。在描述 $var =~ m/mushroom/ 表达式时,此引用解释:

The portion enclosed in '/' characters denotes the characteristic we are looking for. We use the term pattern for it.

因此,当我们说“regex”或“regexp”时,我们基本上指的是正则表达式模式

替代

这部分仅存在于s替代结构中,以s操作/命令为前缀。替换模式语法与正则表达式模式语法非常不同,因为它们通常可以包含命名或编号的反向引用、用于取消反向引用语法的转义序列(参见 "dollar escaping" ),有时还包含大小写更改运算符(例如 \l\L...\E\u\U...\E)。

修饰符

还有called flags ,这些部分有助于“微调”正则表达式引擎匹配模式的过程。最常见的修饰符是 i 不区分大小写标志、g 全局匹配标志、s 构成 . 的单行/点修饰符。 > 跨换行符匹配(在除 Onigmo/Oniguruma 之外的 NFA 正则表达式中,它使用 m)。

关于regex - 如何调用正则表达式的内部部分? (由分隔符分隔的那个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69196682/

相关文章:

javascript - 只允许字符串中的特定字符。 Javascript

regex - 如何在保持大写的同时替换文本?

python - python 中的互斥装饰器

没有 strlen() 的 PHP 字符串长度

c++ - 通过读取文件检测 C++ 中的空行

javascript - 奇怪的 JavaScript 正则表达式

MySQL正则表达式返回两列之间至少有一个单词匹配的所有记录

c++ - _p.h 文件的用途是什么?

ruby - 如何解析 Ruby 中以制表符分隔的文本行?

hadoop - Hive 表的默认分隔符是什么?