有没有一种正则语言来表示正则表达式?

2024-01-09

具体来说,我注意到正则表达式的语言本身并不是正则的。因此,我无法使用正则表达式来解析给定的正则表达式。我需要使用解析器,因为正则表达式本身的语言是上下文无关的。

有没有什么方法可以用可以使用正则表达式解析结果字符串的方式来表示正则表达式?

注意:我的问题不是关于是否存在与当前正则表达式语法相匹配的正则表达式,而是关于我们今天所知道的正则表达式是否存在“表示”(可能不像我们今天所知道的那样简洁)可以使用正则表达式进行解析。另外,请有人删除该重复项,因为它不是重复项。我问的是完全不同的事情。我已经知道当前的正则表达式语言不是正则的(这就是我开始提出原始问题的方式)。


根据“代表”的含义,答案是“是”或“否”:

如果你想要一种(同态)映射到通常的基本正则表达式语言的语言,答案是否定的,因为正则语言不能与非正则语言同构,而标准正则表达式语言是非正则的。这是因为语法需要匹配任意深度的左括号和右括号。

如果“代表”仅意味着指定正则语言的另一种方法,那么答案是肯定的,现在我可以想到至少三种方法来实现这一目标:

  1. “最愚蠢”和最简单的方法是定义一些满射映射f : ℕ -> RegEx从自然数到所有有效标准正则表达式的集合。您可以使用正则表达式定义自然数0|1[01]*,以及由自然数(表示的字符串)表示的正则语言n是由以下表示的常规语言f(n).

    当然,自然数所附加的含义对于人类读者来说根本不明显,因此这种“正则表达式语言”将完全没有用处。

  2. 由于括号是简单正则表达式中唯一的非常规部分,因此最简单的人类可解释方法是扩展标准简单正则表达式语法以允许悬挂括号并定义悬挂括号的语义。

    明显的选择是忽略不匹配的左括号并将不匹配的右括号解释为匹配正则表达式的开头。这本质上相当于根据需要在正则表达式的开头隐式插入尽可能多的左括号,并在正则表达式的末尾隐式插入尽可能多的右括号。此外,(*必须被解释为空字符串的重复。如果我没有错过任何内容,这个定义应该将任何字符串变成具有指定含义的“正则表达式”,所以.*定义了这个“正则表达式语言”。

    该变体甚至具有与标准正则表达式相同的抽象语法。

  3. 另一种变体是指定使用常规语言直接识别语言的 NFA,例如:([a-z]+,([^,]|\\,|\\\\)+,[a-z]+\$?;)*.

    这个想法是[a-z]+用作状态的标签,表达式是转换三元组的列表(s, c, t)从源状态s到目标状态t消费性格c, and a $表示接受转换(参见下面的注释)。在c, 反斜杠用于转义逗号或反斜杠 - 我假设您对标准正则表达式使用相同的字母表,但当然您可以将中间组件替换为任何其他正则语言的符号,表示您希望的任何字母表的字符。 提到的第一个源状态是(单个)初始状态。空表达式定义空语言。

    上面,我写了“接受转换”,而不是“接受状态”,因为这会使上面的正则表达式变得更加复杂。您可以解释包含以下内容的三元组$作为两个转换,即一个转换消耗c from s到一个新的、独特的状态,以及从该状态到t。这应该允许任何 NFA 被表示,通过将每个到接受状态的转换替换为$三元组,每次转换到非接受状态时都带有非$ triple.

需要注意的是,可能会使“是”部分看起来更直观:汇编语言是常规的,甚至是图灵完备的,因此如果无法使用常规语言指定“纯粹的”常规语言,那将是意外的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有一种正则语言来表示正则表达式? 的相关文章

  • 使用正则表达式搜索 Ruby 数组

    你好 我有一个小的 ruby 函数 它可以分割出一个 Ruby 数组 如下所示 def rearrange arr from to sidx arr index from eidx arr index to arr sidx arr sid
  • 如何用正则表达式替换多个匹配/组?

    通常我们会编写以下内容来替换一场比赛 namesRegex re compile r is life re I replaced namesRegex sub r butter There is no life in the void pr
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 正则表达式查找数字后跟字母[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是正则表达式的新手 所以对愚蠢的问题表示歉意 如何识别字符串包含数字后跟字母 例如 在这个地址中 Flat 3a Butterfly St
  • _实际_ Twitter 主题标签格式?不是你的正则表达式,也不是他的代码——真正的代码?

    更新 如果可以的话 请使用 Twitter 的实体 他们为您以及其他项目找到了解决方案 我的情况是 我只有没有实体的推文和所有额外的元数据 我花了我认为不合理的时间试图找到actual主题标签的格式 据我搜索得知 Twitter 尚未发布任
  • Emacs 正则表达式:什么 \< 和 \> 可以做 \b 不能做的事情?

    正则表达式反斜杠 GNU Emacs 手册 http www gnu org software emacs manual html node emacs Regexp Backslash html说 lt 匹配单词的开头 gt 匹配单词末尾
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number
  • 如何使用 C# 查找文本中重复出现的词组? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在统计重复出现的字数字符串生成器 sb 我在互联网上找到了这段代码 据作者称 它与 Word 的字数计数器非常一致 StringB
  • 我可以定义自定义字符类简写吗?

    Java 提供了一些有用的字符类 例如 d and w 我可以定义自己的角色类别吗 例如 能够为字符类定义简写 例如 A Za z 我可以定义自己的角色类别吗 不 你不能 就个人而言 当我有一个 稍微 复杂的正则表达式时 我将正则表达式分解
  • 版本差异? Java 中的正则表达式转义

    看来正则表达式转义在不同版本的 Java 中的工作方式不同 在 Java openjdk 16 0 1 中编译工作正常 在 Java openjdk 11 0 11 中抛出此编译错误 test java 15 error illegal e
  • grep 的贪婪行为

    我认为在正则表达式中 贪婪 适用于量词而不是整个匹配 然而 我观察到 grep E color auto a ab lt printf aab returns aab而不是aab 这同样适用于 sed 另一方面 在 pcregrep 和其他
  • 使用正则表达式定位响铃字符

    我注意到 Bell 有一个正则表达式字符 我却无法匹配 我读到了这个角色的内容维基百科 http en wikipedia org wiki Bell character 但我不明白如何在正则表达式中找到它
  • Python正则表达式检查字符串是否包含任何单词

    我想搜索一个字符串并查看它是否包含以下任何单词 AB AG AS Ltd KB University 我在 javascript 中工作 var str Hello test AB var forbiddenwords new RegExp
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • 如何让 Vim 匹配不以七位数字开头的行?

    我有一个大约 1000 行的文件 除个别行外 所有行均以七位数字开头 我需要捕捉这些行并将它们与前一行实际连接起来 我已经成功地能够使用以下正则表达式模式匹配以七位数字开头的任何行 d 7 我似乎无法让它匹配任何一行不匹配不过 这种模式确实
  • 使用带有字边界的 mgsub 函数作为替换值

    我试图用空格替换向量中字符串元素的子字符串 以下是我们正在考虑的向量 test lt c PALMA DE MALLORCA THE RICH AND THE POOR A CAMEL IN THE DESERT SANTANDER SL
  • Javascript拆分正则表达式问题

    你好 我正在尝试我认为在 Javascript 中相当简单的正则表达式 但给我带来了很多麻烦 我希望能够通过 javascript 通过 和 分割日期 var date 02 25 2010 var myregexp2 new RegExp
  • sed 中的正则表达式用于在一条语句中进行多个替换

    我想清理一些输入并用可接受的输入替换几个字符 例如一个丹麦人 with aa 使用多个语句可以轻松完成此操作 例如 ae aa oe 但由于工具限制 我希望能够在单个正则表达式中完成此操作 我可以捕获所有相关案例 但我的替换不能按我想要的方
  • 用于匹配重复子字符串的单个js正则表达式?

    假设我有一个字符串 例如 where is mummy where is daddy 我想用空字符串替换任何一组重复子字符串 所以在这种情况下where and is元素将被删除 结果字符串将是 mummy daddy 我想知道是否有任何单

随机推荐

  • 在 Visual Studio 项目模板中添加引用?

    我正在为 VS2015 创建一个多项目模板 其中创建的项目之一引用另一个项目 如何使用模板添加参考 如果我使用 VS GUI 添加引用 它会将以下内容添加到 vcxproj 文件中
  • 理解 Node.js 中的 Promise 拒绝

    我正在尝试理解 Node js 中的 Promise 这是示例代码 con queryReturnPromise SELECT FROM bookings WHERE driverId accId AND bookingStatus con
  • dart / flutter 使用 sudo 运行进程

    我想为 mac 桌面开发一个 flutter 应用程序并使用以下命令访问 macs powermetricssudo powermetrics有没有办法在第一次运行时向用户询问此命令的 sudo 权限 嗨 我只是在玩颤振 我正在解决同样的问
  • 快捷栏操作文本颜色未改变

    我想更改小吃栏的操作文本颜色 但由于某种原因它不起作用 我使用以下代码来显示小吃栏 Snackbar make findViewById R id root text Snackbar LENGTH LONG setActionTextCo
  • knex:从结果创建数组的适当方法是什么?

    我有一个端点连接user and user emails表作为一对多关系 postgresql 它看起来如下 router get function req res next db select users id users name us
  • 以编程方式将元素拖放到另一个元素上

    使用 jQuery UI 是否可以使用 JavaScript 执行拖放操作 Example http jsfiddle net KFRu9 单击链接后 将 pony并将其放入 box 我尝试过触发拖动事件 但这似乎不起作用 pony tri
  • javascript - 如何在 firebase 中使用承诺?

    最近我被一个问题困扰 不知道如何解决 我问this https stackoverflow com questions 47775150 javascript then executing before the loop completes
  • 将占总数百分比的列添加到 Pandas 数据框中

    我有一个正在做的数据框groupby 来获取列值的计数 我正在尝试为 总计百分比 添加一个附加列 我不知道如何实现这一点 我查看了一些 groupby 选项 但似乎找不到任何合适的选项 我的数据框如下所示 DAYSLATE DAYSLATE
  • Xcode 10 'xxx' 在不同模块中有不同的定义;模块“xx”中的定义第一个区别是函数体

    In Xcode 9 just an warming update to Xcode 10 changed to error 该错误意味着ControllerImports h声明一个名为的函数 xxx 已经声明在UIKit BJL M9D
  • 出现错误变量 <变量名称> 未声明或从未分配

    我使用 Visual Studio 2008 在 winforms C 中实现了一个大表单 在对话框的大部分工作正常之后 当我尝试打开设计器时 它开始显示很多错误信息 如标题所示 该变量未声明或从未分配 我为很多以前工作正常的控件得到了这个
  • ReactJs 选择添加默认值

    如果用户不在 ReactJs 中触摸它 我想存储选择的默认值 这怎么可能
  • R 中的随机子采样

    我是 R 新手 因此我的问题可能非常简单 我有 40 个拥有丰富浮游动物的地点 我的数据如下所示 列是物种丰度 行是位点 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 0 0 0
  • .NET Core 2.0 身份和 jwt?

    我一直在四处寻找并尝试对 NET Core Identity 进行更多研究 和 Jwt json Web 令牌 我一直在我的 NET Core 2 0 应用程序中使用默认身份作为身份验证 授权 到目前为止它运行良好 我遇到了障碍 我认为这是
  • 在main方法中调用Comparator参数

    我正在实现插入排序方法 这是我的代码的要求 insertSort 方法是一个静态方法 不返回任何内容 它有两个参数 一个通用数组和一个比较器 通用 它使用合并排序算法对通用数组进行排序 我的问题是 在 main 方法中调用时 比较器参数 c
  • 如何检测TMenuItem右键单击?

    平台 delphi 2010 将 Tmainmenu 拖放到 form1 上 将 Tpopupmenu 拖放到 form1 上 添加 mainmenu1 和 popupmenu 项目 主菜单 gt 文件 gt 项目1 弹出菜单 gt 弹出项
  • GLSL:如何执行类似 switch 的语句

    我想根据传递到着色器的数据动态调用缓动 所以用伪代码来说 var easing easings easingId var value easing point 我想知道在 GLSL 中完成此任务的最佳方法 我可以以某种方式使用 switch
  • VSCode:git staging 时触发organizeImports

    我喜欢 VSCode 中的自动组织功能 但让它在每次保存时都执行此操作给我带来了一些麻烦 editor codeActionsOnSave source organizeImports true 当我暂存导入时 是否可以设置一些 git h
  • 将 ObjectAid 安装到 eclipse LUNA 时出现错误

    我有 eclipse LUNA 我正在尝试安装 ObjectAid 来构建 UML 图 当我尝试安装它时 出现以下错误 An error occurred while collecting items to be installed ses
  • React Native:完成拖动后获取元素的实际 x,y 坐标(react-native-gesture-handler)

    我正在使用这个库 https github com software mansion react native gesture handler https github com software mansion react native g
  • 有没有一种正则语言来表示正则表达式?

    具体来说 我注意到正则表达式的语言本身并不是正则的 因此 我无法使用正则表达式来解析给定的正则表达式 我需要使用解析器 因为正则表达式本身的语言是上下文无关的 有没有什么方法可以用可以使用正则表达式解析结果字符串的方式来表示正则表达式 注意