正则表达式的计算复杂度

2023-12-24

正则表达式很快变得太复杂(对我来说)难以理解。即使是像这样简单的事情[ab][cd],有几个逻辑分支。我的目标是提高代码库的可维护性,因此这些问题的答案可以帮助我们检测和修复复杂的代码:

  1. 是否有计算复杂度指标(类似于圈复杂度)包括 正则表达式固有的复杂性?
  2. 有没有什么工具 产生正则表达式的复杂度?
  3. 是否有可以建议简化正则表达式的工具?

您可以尝试使用正则表达式的编译形式,并尝试将一些代码复杂性指标映射到该形式,例如代码行数或圈复杂度。要明白我的意思,请查看以下 stackoverflow 答案:https://stackoverflow.com/a/2348725/5747415 https://stackoverflow.com/a/2348725/5747415,它展示了如何使用 perl 访问正则表达式的编译形式。另一个例子如下所示:http://perldoc.perl.org/perldebguts.html#Debugging-Regular-Expressions http://perldoc.perl.org/perldebguts.html#Debugging-Regular-Expressions,引用该页面的工具输出:

Compiling REx '[bc]d(ef*g)+h[ij]k$'
1: ANYOF[bc](12)
12: EXACT <d>(14)
14: CURLYX[0] {1,32767}(28)
16:   OPEN1(18)
18:     EXACT <e>(20)
20:     STAR(23)
21:       EXACT <f>(0)
23:     EXACT <g>(25)
25:   CLOSE1(27)
27:   WHILEM[1/1](0)
28: NOTHING(29)
29: EXACT <h>(31)
31: ANYOF[ij](42)
42: EXACT <k>(44)
44: EOL(45)
45: END(0)

顺便说一句,我祝贺您做出提高代码可维护性的决定。也就是说,我只是想表达我的怀疑,任何正式的指标都可以提供比(甚至可以接近)经验丰富的开发人员的判断更好的指导......

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

正则表达式的计算复杂度 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何在 Angular 4 中翻译 mat-paginator?

    你知道如何在 Angular 中翻译 每页项目 吗mat paginator标签 这mat paginator是材料设计中的一个元素 您可以使用MatPaginatorIntl为了这 威尔 豪厄尔制作 https github com an
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • C# MySQL 连接器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我应该为 MySQL 构建自己的包装类 还是应该使用下载 Visual Studio 的可安装 MySQL 插件之一来提供帮助 我的应用程
  • 未捕获的引用错误:未定义刷新

    您好 我正在尝试以 content id postlist 样式获取我的帖子 并且我已经准备好需要刷新页面 刷新 但由于某种原因 我收到 刷新未定义 错误 并且我显示的帖子没有样式 document on pagebeforeshow bl
  • 保存未公开其关系的外键属性的实体时发生错误

    我有一个简单的代码实体框架 EF v4 1代码先 PasmISOContext db new PasmISOContext var user new User user CreationDate DateTime Now user Last
  • _DllMain@12 已定义

    我尝试从 mDNSResponder 107 6 tar gz 存档构建子项目 ExplorerPlugin 但 收到下一个链接错误 uafxcwd lib dllmodul obj 错误 LNK2005 DllMain 12 已定义 怎么
  • DataContractSerializer 与 XmlSerializer:每个序列化器的优缺点

    我的桌面应用程序使用序列化对象XmlSerializer 有人建议我利用DataContractSerializer反而 哪些场景下应该使用DataContractSerializer 非常感谢 评论 1 输出的XML文件存储在本地 没有其
  • junit5 给出扩展之间的依赖关系

    我刚刚开始编写一些 junit5 测试和扩展 我很快就遇到了我认为的问题 我如何告诉 junit5ExtensionB需要ExtensionA在场 例如我有一个 基本 扩展ExtensionA它启动一个数据库并进行一些初始化 这对于一些测试
  • 在 testflightapp.com 上哪里可以看到 TFLog 输出?

    我在用着TFLog在我的 iPhone 应用程序中 但是在哪里https testflightapp com https testflightapp com我可以查看输出吗 我只是通过反复试验以及在 TestFlight 网站上多次点击才发
  • Gerrit:添加/提交到本地 git 存储库后,尝试推送到远程时收到:[远程拒绝](未进行任何更改)

    以下是尝试推送到远程 git 存储库时的输出 Counting objects 28 done Delta compression using up to 8 threads Compressing objects 100 26 26 do
  • 房间类型地图转换器

    你会如何为 Map 编写 TypeConverter 我的方法是由 Moshi 来做 class Converters val moshi Moshi Builder add KotlinJsonAdapterFactory build v
  • curl_multi_getcontent 返回空字符串

    这个问题非常类似于PHPcurl multi gecontent 返回 null https stackoverflow com questions 18796693 php curl multi getcontent returns nu
  • qnamaker 与 LUIS

    我正在探索微软的服务 路易斯引起了我的注意 将其添加到 QNAmaker 机器人会有好处吗 机器人基本上会尽可能准确地回答问题 没有别的 只是来自知识库的纯粹答案 我还需要添加 LUIS 吗 不 您不需要 LUIS 即可让 QnA 制作者回
  • 是否可以使用会员 API 更改用户名

    我正在 ASP NET 中使用默认的 sql 成员资格提供程序 并且我想提供一个页面来更改用户的用户名 我相信我确信我可以使用自定义提供程序来完成此操作 但是可以使用默认提供程序来完成此操作吗 我的问题的第二部分是 我是否应该允许用户在创建
  • C++中继承模板类的构造函数

    在 c 11 中 可以继承构造函数 我有以下代码 重现示例 但无法编译 template
  • 如何在console.log中打印JSON数据?

    我无法从 JavaScript 访问 JSON 数据 请帮助我如何在 javascript 中从 JSON 数据访问数据 我有一个 JSON 数据 例如 success true input data quantity row 122 1
  • 指定端口时Django runserver错误

    我最近习惯在 django 项目中执行以下操作 以便我可以在各种操作系统 即非 Linux 上测试 Bowser 兼容性 sudo manage py runserver 0 0 0 0 80 这使我可以通过网络上的任何计算机访问该项目 但
  • Django 跨站反向 URL

    可能是简单的问题 我只是错过了一些东西 但我没有想法 我有 Django 项目 为多个具有不同特性的站点提供服务sessions py并且完全不同ROOT URLCONFs 一个站点处理用户注册 身份验证和配置文件设置 其他站点 在另一个域
  • 使用 Shapeless 将嵌套案例类转换为嵌套映射

    我正在尝试使用 Shapeless 解决 this 1 问题 总而言之 它是将嵌套案例类转换为 Map String Any 以下是示例 case class Person name String address Address case
  • AppleScript 将推出 1Password mini

    I use 1Password存储我的密码 以及fluid app创建一些特定于站点的应用程序 浏览器 While 1Password与 Chrome Safari 和其他浏览器集成良好 但与 Fluid 应用程序不能很好地配合 这就是我的
  • 当用户单击它时如何更改 .svg 图标或图像颜色。在世博会上反应天真

    我是反应原生博览会的新手 我有两个 svg 图像 一种是灰色 另一种是橙色 所以我希望当用户点击它时它会变成橙色 那么如何做到这一点 请帮忙 这是我的代码
  • 正则表达式的计算复杂度

    正则表达式很快变得太复杂 对我来说 难以理解 即使是像这样简单的事情 ab cd 有几个逻辑分支 我的目标是提高代码库的可维护性 因此这些问题的答案可以帮助我们检测和修复复杂的代码 是否有计算复杂度指标 类似于圈复杂度 包括 正则表达式固有