正则表达式匹配任何单词 - 没有非贪婪运算符

2024-02-28

我想将任何内容匹配到特定单词(例如,C 中的结束评论*/),但是,由于性能原因,我不想使用非贪婪运算符。

例如,要匹配 C 注释:/\*.*?\*/对于我的文件来说太慢了。有没有可能提高性能?


当然可以,使用展开循环技术 http://www.softec.lu/site/RegularExpressions/UnrollingTheLoop:

/\*[^*]*(?:\*(?!/)[^*]*)*\*/

See

展开循环技术基于这样的假设:在大多数情况下,您通过重复的交替知道哪种情况应该是最常见的,哪种情况是例外的。我们将第一个称为正常情况,第二个称为特殊情况。展开循环技术的一般语法可以写为:

normal* ( special normal* )*

这可能意味着,匹配正常情况,如果您发现特殊情况,则匹配它而不是再次匹配正常情况。您注意到此语法的一部分可能会导致超线性匹配。为了避免无休止的追加匹配,应仔细应用以下规则:

  • 特殊情况和正常情况的开始必须是互斥的
  • 特殊字符必须始终匹配至少一个字符
  • 特殊表达式必须是原子的:请注意以下事实:( special normal* )*可以减少到(special)*,如果特殊的话是special*,这变得类似于(a*)*这是一个不确定的表达式。

C# 模式声明(使用逐字字符串文字):

var pattern = @"/\*[^*]*(?:\*(?!/)[^*]*)*\*/";

正则表达式细分:

  • /\*- 字面意思/*
  • [^*]*- 0 个或更多字符*
  • (?:\*(?!/)[^*]*)* - 0 or more sequences of...
    • \*(?!/)- 字面意思*没有跟随/
    • [^*]*- 0 个或更多字符*
  • \*/- 字面意思*/

下面的图表显示了 3 个可能相同的正则表达式的效率(在正则英雄网 http://regexhero.net/tester*):

* 测试针对/* Comment * Typical * Comment */

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

正则表达式匹配任何单词 - 没有非贪婪运算符 的相关文章

  • 正则表达式允许零,只要它不是第一个数字[重复]

    这个问题在这里已经有答案了 昨天我在这里发布了一个问题正则表达式允许 null 或 1 到 9 数字 https stackoverflow com questions 40354842 regular expression allow n
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo

随机推荐

  • 将日期从默认区域设置转换为英语区域设置

    我通过使用格式化日期来保存日期SimpleDateFormat DateFormat dateForm new SimpleDateFormat HH mm ss dd MMM yy String dateOutput dateForm f
  • jQuery 可以从我的事件处理程序中抛出错误吗?

    我在使用 jQuery 设置的特定事件处理程序中发生了错误 并且代码只是中断而没有显示任何错误 当我过去在 YUI 中编写类似的代码时 我会设置 YAHOO util Event throwErrors true 在我的开发中 versio
  • 如何使用 x,y 坐标列表绘制曲线(峰值)

    我有一个打印的 x y 点列表 显示不均匀的峰值曲线 上面的图像是通过在 java 绘图组件上绘制点而生成的 我使用以下方法将它们绘制在绘制组件上 g drawline pointX pointY pointX pointY 有没有更好的方
  • “编译器选项”-auxbase-strip 的作用是什么?

    我刚刚使用编译器选项 frecord gcc switches 编译了代码 以查看编译器自动选择哪些选项 现在我可以看到部分中的选项 GCC command line 有几个看似合理的编译器选项 但也有一个我找不到任何相关文档 什么是 au
  • 如何从 YouTube 视频中删除黑条

    YouTube 视频中出现了黑条 视频播放时看起来没什么奇怪的 我们可以删除视频中的黑色空间吗 我想删除那个黑色空间 并以我们为播放器尺寸选择的所需宽高比显示视频 目前我正在使用stander google YT 播放器API 这有意义吗
  • 如何在FabricJs中设置相对位置(oCoords)?

    我在fabricJs中有一个文本 我设置了顶部和左侧 这会将 aCoords 正确设置为这些值 但是 oCoords 不匹配 并且文本未显示在正确的位置 我怀疑我需要以某种方式设置为 oCoords 以便文本显示在画布上的右侧像素坐标 顶部
  • 如何动态更改 Jekyll _config.yml 中的变量?

    您好 我正在开发一个 Jekyll 项目 我需要在 config yml 中放置一个变量 我想从模板代码中动态更改该变量 这就是我想做的 但我无法让它发挥作用 是否有可能做到这一点 在 config yml中 my var value 在模
  • 友好 ID slug 不包含 id

    我想要这样的网址 http domain com products 454 table lamp 所以我像这样使用Friendly id extend FriendlyId friendly id slug candidates use h
  • 配置执行器端点安全

    Spring Boot Actuator 端点默认受基本 http 安全保护 可以更改为使用 Spring Security 吗 我已成功设置 Spring Security 并使用它来保护我的其他页面 I tried security b
  • 如何从nodejs中的process.environment中提取环境变量

    我已成功将条纹支付集成到我的虚拟 Nodejs 项目中 但我仍然面临一个问题 它不允许我继续前进 因为我必须将代码推送到我的 github 存储库 因此 我通过 npm 安装了 dotenv 包 并创建了一个 env 文件来存储我的条带密钥
  • 如何获取 Woocommerce 产品中的变体 ID

    我正在尝试进入一个插件 我正在编写产品的变体 ID 这是我写的 class mass public function construct add action woocommerce product after variable attri
  • Android minLines 和 maxLines 不能在同一个 TextView 中一起工作

    这里我只有 1 件商品ListView我展示了两个不同的TextViews末尾有不同颜色的ListView item 但问题是我想显示每个最多 3 行TextView但如果长度为TextView是小 但如果文本很大 它效果很好 当我添加an
  • 如何确保我的 django 项目正在使用我为其创建的虚拟环境?

    我知道已经有一个与此类似的问题 但我认为我想要的答案不存在 我是 django 的新手 我已经使用 virtualenv 和 django 项目创建了一个虚拟环境 但是我们如何知道我的项目正在使用虚拟环境的包而不是使用全局包 请给我一些详细
  • 在 Episerver 中截断 Xhtmlstring

    我需要获得截断的 Xhtmlstring 的 html 友好版本 因为截断时标签结尾可能会被截断 关于如何实现这一目标有什么想法吗 我想过先删除所有标签 然后进行剪切 但是 Episerver 内部是否有解决方案 或者这只是使用正则表达式进
  • Matplotlib 中的像素化动画

    我一直在使用 Matplotlib 的动画工具来制作动画人物 我注意到一个问题 对于具有大量帧的动画来说尤其明显 即图形的质量很快就会恶化 导致输出看起来像素化 模糊 例子 Messy grid lines pixelated output
  • 将 HTMLDocument 转换为可打印字符串

    我想将 Javascript DOM HTMLDcument 转换为可以写入文件的字符串 但是如何将 HTMLDocument 的字符串转换为 xml Update如果可能的话 我希望看到应用任何动态 JavaScript 渲染后生成的 h
  • Python从文件中删除一行或多行而不修改现有内容

    我必须根据文件中的用户输入删除字符串或字符串列表 我参考了下面的链接 一切正常 删除文件中的特定行 python https stackoverflow com questions 4710067 deleting a specific l
  • Jenkinsfile 中的 Jenkins 全局环境变量

    如何在 Jenkinsfile 中调用全局环境变量 例如 如果我有一个变量 name credentialsId value xxxx xxxx xxxxx xxxxxxxxx 如何在 groovy 脚本中使用它 I tried crede
  • 视差效果使元素延迟滚动

    我正在尝试复制此网站 www adidas co uk climazone 这些元素似乎只在用户滚动后轻微移动 我怎样才能实现这个目标 谢谢你 Here s DEMO http s codepen io CY5 debug vKkELx它实
  • 正则表达式匹配任何单词 - 没有非贪婪运算符

    我想将任何内容匹配到特定单词 例如 C 中的结束评论 但是 由于性能原因 我不想使用非贪婪运算符 例如 要匹配 C 注释 对于我的文件来说太慢了 有没有可能提高性能 当然可以 使用展开循环技术 http www softec lu site