正则表达式失败时非常慢

2024-04-08

我有一个正则表达式,应该验证字符串是否由空格分隔的字符串组成。正则表达式工作得很好(好吧,它最后允许有一个空格......但这不是他的问题),但是当验证失败时需要很长时间。

正则表达式如下:

/^(([\w\-]+)( )?){0,}$/

当尝试使用字符串进行验证时

"'this-is_SAMPLE-scope-123,this-is_SAMPLE-scope-456'"

需要2秒。

测试在 ruby​​ 1.9.2-rc1 和 1.8.7 中进行。但这可能是一个普遍问题。

任何想法?


你的模式导致灾难性的回溯 http://www.regular-expressions.info/catastrophic.html。灾难性的部分可以总结为:

(.+)*

The +*在某些引擎中以灾难性的方式相互作用。

目前还不清楚你到底想匹配什么,但可能是这样的:

^[\w\-]+( [\w\-]+)*$

这匹配 (如 rubular.com 上所示 http://www.rubular.com/r/BTRKHBzTuS):

hello world
99 bottles of beer on the wall
this_works_too

并拒绝:

not like this, not like this
hey what the &#@!
too many    spaces

另一种选择是在原始模式的某些部分使用所有格量词和/或原子分组。

参考

  • 正则表达式.info/所有格量词 http://www.regular-expressions.info/possessive.html and 原子分组 http://www.regular-expressions.info/atomic.html

附加提示

The {0,}重复通常简单地写为*。您还可以使用非捕获组来提高性能,即(?:pattern).

参考

  • 用于捕获的正则表达式.info/括号 http://www.regular-expressions.info/brackets.html and 用星号和加号重复 http://www.regular-expressions.info/repeat.html

相关问题

  • 使用明确编号的重复而不是问号、星号和加号 https://stackoverflow.com/questions/3032593/using-explicitly-numbered-repetition-instead-of-question-mark-star-and-plus
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式失败时非常慢 的相关文章

  • 正则表达式,选择最接近的匹配

    假设以下单词序列 BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA 我想做的是将 BLA 中的文本
  • php 或 zend 中国际电话号码验证的正则表达式是什么?

    我有一个 zend 表单 其中有一个电话号码字段 并且必须检查验证器 我决定为此使用正则表达式 我搜索了谷歌 但我得到的结果不起作用 谁能给我提供正则表达式 这是我的代码 phone new Zend Form Element Text p
  • 匹配括号内任何字符的正则表达式

    尝试创建一个与括号内的任何字符匹配的正则表达式 我的正则表达式模式是这样的 preg match listanswer answer 括号内的所有字符串都是匹配模式 但问题是 当我尝试匹配例如 this word sample data 它
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • 删除匹配前的一个单词和一个单词

    匹配之前的一个单词可以是一组任何符号 例如 D E F 我有一个正则表达式 s w s XXX 输入示例 This is KKK M D D xXx PPP输出示例 This is KKK PPP 所以我需要删除 XXX 之前的 1 个单词
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • 我在 Rails 中使用了保留字吗?

    这是我的模型 class Record lt ActiveRecord Base belongs to user belongs to directory end class Directory lt ActiveRecord Base h
  • RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

    RegularExpressionValidator ValidationExpression d 10 仅表示数字 最多 10 位 RegularExpressionValidator ValidationExpression d 10
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • 用户未定义的方法 attr_accessible 错误

    我正在尝试创建某种登录 我创建了一个用户脚手架并将此代码放在我的 user rb 中 class User lt ActiveRecord Base attr accessible name password digest password
  • 如何修复 TypeError: G 必须是 'd' 矩阵?

    目标 尝试通过优化过程运行玩具数据集 我遇到以下错误 TypeError Traceback most recent call last
  • Ruby require 'file' 不起作用,但 require './file' 可以。为什么?

    我有一个充满 ruby 文件的文件夹 当我尝试使用位于同一目录中的另一个文件中的一个文件时require file 我得到一个LoadError但是当我使用require file 一切正常 有人可以向我解释为什么会发生这种情况吗 如果有什
  • 有没有办法匹配任意 Unicode 字母字符?

    我有一些文档经过 OCR 从 PDF 转换为 HTML 因此 他们最终会出现很多随机的 unicode 标点符号 而转换器会搞砸 即省略号等 他们还正确地有一堆非英语但仍然是字母字符 如 和俄语字符等 有没有办法制作一个匹配任何 unico
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • 什么是大O表示法?你用它吗? [复制]

    这个问题在这里已经有答案了 什么是大O表示法 你用它吗 我想我错过了这门大学课程 D 有人使用过它并给出一些现实生活中使用它的例子吗 也可以看看 八岁孩子的大O https stackoverflow com questions 10716

随机推荐

  • Carbon Emacs 不粘贴 Microsoft Word 复制的内容

    不确定 Stackoverflow 是否是正确的站点 我在 mac ox 10 6 7 上使用 Carbon emacs 22 0 971 和 MS Word 12 2 8 我在 MS Word 中有一些文本 我想将其复制并粘贴到 emac
  • python将文件发送到作为服务运行的tika

    参考这个问题 https stackoverflow com questions 16251436 unable to run java command from cgi我想将 MS Word doc 文件发送到作为服务运行的 tika 应
  • 将子目录分离(移动)到单独的 Git 存储库中

    我有一个Git http en wikipedia org wiki Git 28software 29存储库 其中包含许多子目录 现在我发现其中一个子目录与另一个子目录无关 应该分离到一个单独的存储库 如何在保留子目录中文件的历史记录的同
  • 创建自定义 ODBC 驱动程序

    在我目前的工作中 我们希望实现自己的 odbc 驱动程序 以允许许多不同的应用程序能够作为数据源连接到我们自己的应用程序 现在我们正在尝试权衡根据实施规范开发我们自己的驱动程序的选项 这是巨大的 or使用允许程序员 填充 数据特定部分并允许
  • Docker 链接容器、Docker 网络、Compose 网络 - 我们现在应该如何“链接”容器

    我有一个现有的应用程序 由在同一主机上运行的 4 个 docker 容器组成 它们已通过以下方式连接在一起link命令 然而 在对docker进行了一些升级之后 link行为已被弃用 并且似乎发生了变化 我们遇到的问题是容器现在失去了彼此的
  • 如何使用带有 ARRAY 关键字的 Postgresql GIN 索引

    我想创建GIN使用标量文本列上的索引ARRAY 表达式如下 CREATE TABLE mytab scalar column TEXT CREATE INDEX idx gin ON mytab USING GIN ARRAY scalar
  • cuda中的count3非常慢

    我在 CUDA 中编写了一个小程序 用于计算 C 数组中有多少个 3 并打印它们 include
  • 解析树和语法信息

    有谁知道在哪里可以找到好的在线资源以及如何制作语法和解析树的示例 最好是介绍材料 信息是 n00b 友好的 我自己在 Google 上没有找到任何好的信息 Edit 我正在考虑理论 而不是特定的解析器软件 网上没有 不过也许你应该看看编译器
  • 如何向 XAML 窗口添加多个资源?

    我现在有一个小问题 我不知道如何解决 我想向一个窗口添加两个资源 一个是 XAML 文件样式资源 另一个是 ValueConverter 类 如果我一次只使用一种资源 它们都会起作用
  • 使用 g-signin 按钮,G+ 登录立即将我注销 3 次

    我在 HEAD 中的代码是
  • 将 python 日志记录与 AWS Lambda 结合使用

    正如 AWS 文档所示 import logging logger logging getLogger logger setLevel logging INFO def my logging handler event context lo
  • 如何导入更高一级的模块?

    For app init py abc py mod init py def py 如何从 def py 导入 abc py 导入当前模块父目录中的模块 abc py import os parentdir os path dirname
  • 鼠标移动时放大图像:到达所有角落

    我正在研究缩放功能 此缩放是一个具有 100 窗口大小的固定框 并且位于具有 200 固定框宽度的图像内部 这个缩放需要像这样工作 当光标位于窗口中央时 图像应位于中央 当光标位于右上角时 图像应停留在窗口的右上角 因此可以通过角到达图像
  • 套接字如何既可以连接又可以关闭?

    我正在使用 Java 套接字客户端 如果服务器仍然连接到我的客户端 但它没有发送对我的消息的响应 我最终会收到读取超时异常 在这种情况下 我想测试一下是否应该重新连接我的套接字 或者只是保留它并重新使用它 我使用这个条件 if socket
  • .htc 文件在旧版 IE 中是否是像 CSS3 那样的圆角的良好做法?

    我正在尝试使用 CSS3 制作带有圆角的简单 html 按钮 但对于 IE 我使用 htc 文件作为圆曲线 使用 htc 文件是好习惯还是坏习惯 我无法判断使用这个 html 文件 我的另一个担心是渐进增强是否允许使用 htc 文件 还请告
  • 用python计算时间序列数据的概率分布

    我有一个关于概率分布函数的问题我有一个时间序列数据 我想计算不同时间窗口内数据的概率分布 我开发了以下代码 但我找不到该函数的概率分布值 a pd DataFrame 0 0 21 660332407421638 20 5642894358
  • 如何在 RHEL 虚拟机上运行 minikube?

    有没有办法在 RHEL VM 虚拟机管理程序 上运行 Kubernetes minikube 或者还有其他方法可以使用单个虚拟机尝试 Kubernetes 吗 要在 RHEL CentOS VM 上运行 minikube 您需要在安装 mi
  • 在 CodeRush 中查找键绑定定义

    如果我部署了社区插件并在 CodeRush 中设置了键绑定 那么我现在如何找到我在选项对话框 树层次结构中归档它的位置 打开 CodeRush 选项屏幕 选择DevExpress 选项从菜单或点击Ctrl Shift Alt O 然后找到I
  • 尝试从私有实例调用模板方法时出现编译器错误[重复]

    这个问题在这里已经有答案了 如果您已经知道答案 这个问题只是另一个问题的重复 请注意我的后续问题 如果存在同名的不相关的全局模板函数 为什么不需要模板关键字 https stackoverflow com questions 2389249
  • 正则表达式失败时非常慢

    我有一个正则表达式 应该验证字符串是否由空格分隔的字符串组成 正则表达式工作得很好 好吧 它最后允许有一个空格 但这不是他的问题 但是当验证失败时需要很长时间 正则表达式如下 w 0 当尝试使用字符串进行验证时 this is SAMPLE