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

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(使用前将#替换为@)

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

  • Java用逗号或点和两个小数值验证价格[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 验证必须用点或逗号表示价格值且最多具有两位小数值的字符串的最佳方法和解决方案是什么 RegExp java text DecimalFor
  • php 验证十进制格式的纬度/经度字符串

    好吧 我有一个巨大的经度和纬度坐标列表 也就是说 我还有一些来源来提取这些坐标 其中一些来自 get post 方法 这可能会导致我的网站 服务中存在潜在的安全漏洞 所以我想弄清楚如何通过 PHP 验证经度和纬度 我正在考虑通过 preg
  • 常规语法与上下文无关语法

    我正在为我的学习计算语言测试 有一个想法我无法理解 我明白常规语法更简单 不能包含歧义 但不能完成编程语言所需的许多任务 我也明白了上下文无关语法允许歧义 但允许一些编程语言必需的东西 例如回文 我遇到的困难是理解如何通过知道以下内容来得出
  • 包含某些特殊字符(排除所有其他字符)的密码的正则表达式

    我必须为指定为的密码提供数据注释正则表达式 min 8 chars min 1 upper min 1 lower min 1 numeric min 1 special char which can ONLY be one of the
  • 如何连接行并添加分隔符?

    命令J连接线 命令gJ连接线删除空格 是否还有连接行的命令 在行之间添加分隔符 Example Input text other text more text text 我想做的事 选择这4行 如果开始和 或 EOL 处有空格 请将其删除
  • 如何使用斯坦福TokensRegex?

    我正在尝试使用斯坦福大学TokensRegex 但是 我在匹配器行中遇到错误 请参阅注释 它说 请尽力帮助我 下面是我的代码 String file A store has many branches A manager may manag
  • 从字符串中提取数字 (Regex C++)

    假设我有一根绳子S 1 this is a number 200 Val 54 4class find57 我想用Regex仅提取这些数字 num 1 1 num 2 200 num 3 54 而不是 4class 中的 4 或 find5
  • 正则表达式 - 检查输入是否仍有机会匹配

    我们有这样的正则表达式 var regexp one two three 所以只有像这样的字符串 one two three or one two three four or one twotwo three 等会匹配它 但是 如果我们有类
  • RewriteCond REQUEST_URI - ^ 未按预期工作

    我正在 codeigniter 中构建一个网站 我在 htaccess 文件中有一系列重写条件和规则 第一组规则根据 uri 的第一段打开或关闭 SSL 然后它再次循环 如果找到匹配项 则适当地重定向页面 如果没有匹配项 并且 uri 不以
  • 使用解析将 ** 运算符更改为幂函数?

    我的要求是将 运算符更改为幂函数 例如 1 Input B 2 Output power B 2 2 B 2 T 2 X Output power B 2 我写了下面的正则表达式来解决这个问题 rx r a zA Z0 9 a zA Z0
  • 将上部字符转换为下部字符,将下部字符转换为上部字符(反之亦然)[重复]

    这个问题在这里已经有答案了 我需要将某些字符串中的所有较低字符转换为较高字符 并将所有较高字符转换为较低字符 例如 var testString heLLoWorld 应该 HEllOwORLD 转换后 在不保存临时字符串的情况下实现此目的
  • 我可以缩短这个正则表达式吗?

    我需要检查字符串是否符合特定的 ID 格式 ID的格式如下 aBcDe fghIj KLmno pQRsT uVWxy 由五个大写或小写字母组成的五个块的序列 由一个破折号分隔 我有以下有效的正则表达式 string idFormat a
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • REgex从oracle中的字符串中获取数字

    我有以下格式的字符串 阿克拉姆 88 jamesstree 20140418 阿克兰 8 约翰街 20140418 阿克兰 888 johnstreet 20140418 现在我只想检索 88 8 和 888 值 我为此编写了以下查询 SU
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 解析西班牙姓氏

    西班牙姓氏由三部分组成 父亲的名字 可选的母亲姓名 可选配偶的父亲姓名 这三个部分中的每一部分都是一个单词 前面可能带有 De Del De La De Los 或 De Las 这些前缀中的每一个都以大写字母开头 并且每个部分可能只有一个
  • 正则表达式:删除 xml 的空元素标签

    我想将所有自封闭元素替换为长语法 因为我的网络浏览器在它们上绊倒 Example becomes 我正在使用 python 风格的正则表达式 这些解决方案都不会容纳像 foo gt 这样的属性 尝试 s lt w gt s gt lt 1

随机推荐

  • 在 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
  • 有没有一种正则语言来表示正则表达式?

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