问题标签 [non-greedy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1098 浏览

c++ - 使用正则表达式提取引用和未引用的值

我正在尝试<tag>=<value>使用正则表达式解析一个类型的字符串,但是遇到了一些添加对引用值的支持的问题。这个想法是任何未引用的值都应该被修剪掉前导/尾随空格,这样[ Hello ]就变成[Hello]了(请忽略方括号。)

但是,当引用该值时,我希望删除包括双引号在内的任何内容,但不再赘述,因此[ " Hello World " ]将变为[" Hello World "]

到目前为止,我已经提出了以下带有模式匹配的代码(请注意,某些字符已被转义或双重转义,以避免将它们解释为三字符图或其他 C 格式字符。)

取出双重转义,这分解为:

  • ^- 线的开始。
  • \s*- 可选数量的空白。
  • ([a-zA-Z0-9_-]+)- 一个或多个字母数字或破折号或下划线。这被捕获为标签。
  • \s*- 可选数量的空白。
  • =- 一个“相等”的符号。
  • \s*- 可选数量的空白。
  • "??- 一个可选的双引号(非贪婪)。
  • ([%:\a-zA-Z0-9 /\._]+?)- 一个或多个字母数字或空格、下划线、百分比、冒号、句点、正斜杠或反斜杠。这被捕获为值(非贪婪)。
  • "??- 一个可选的双引号(非贪婪)。
  • \s*- 可选数量的空白。
  • $- 行结束

对于中的示例调用main(),我希望得到:

但我实际得到的是:

所以它几乎是正确的,但由于某种原因,第一个引号在输出值中徘徊,即使我特别将正则表达式的值部分与它外面的引号括起来。

0 投票
3 回答
128 浏览

regex - 使用“?”的惰性正则表达式背后的逻辑?

这是我的问题:

例如,如果您的模式是:

美国广播公司?

那么这将匹配: ab abc 但不是abd as c?意思是:如果有交流,匹配,如果没有,不用担心..

所以说你有这样的事情:

->sometext<-->somemoretext<-

如果你有这样的模式:(这是贪婪的) ->.*<-那么它只会匹配:

->sometext<-->sometext<-

但是,如果您的模式是惰性的: ->.*?<-那么它将匹配: ->sometext< - AND ->sometext<- ...

如果, ?意思是,诸如是否/不是(如第一个示例),那么第二个示例背后的逻辑是什么,有人可以解释一下吗?如果模式是 .*,为什么它会在 ->sometext-< 中停止?

0 投票
2 回答
297 浏览

regex - 使用正则表达式消除文件中的块(iCal 文件中的分类事件)

我有一个 .ics 文件,我想根据事件类别创建单独的新 .ics 文件(我无法让 egroupware 仅导出一个类别的事件,我想根据类别创建新日历)。我的预期方法是重复消除除一类事件之外的所有事件,然后使用 EditPad Lite 7 (Windows) 保存文件。

我正在努力使正则表达式正确。.+? 仍然太贪婪并且否定字符串(例如从一个类别中消除除事件之外的所有事件)也不起作用。

样本

正则表达式BEGIN:VEVENT.+?CATEGORIES:Sports.+?END:VEVENT应该只匹配体育赛事,但它会捕获从第一个BEGIN到第一个END类别的所有内容。

编辑:否定也不起作用:BEGIN:VEVENT.+?((?!CATEGORIES:Sports).).+?END:VEVENT.

我错过了什么?任何指针都受到高度赞赏。

0 投票
3 回答
164 浏览

python - python中大多数非贪婪的正则表达式匹配(或者只是一般的正则表达式

我有一个问题,我的正则表达式匹配太多。我已经尝试让它尽可能不贪婪。我的RE是:

意义

“定义主机”后跟任何空格或制表符,后跟“{”。任何文本和换行符,直到任意数量的空格或制表符后跟“host_name”,然后是任意数量的空格或制表符,后跟“HOST_B”。任何文本加上换行符,直到任何空格或制表符后跟“}”

我的文字是

匹配从第一个定义到 host_b 的结束括号。它没有得到 host_c 的组(它不应该得到 host_c),但是我只想要主机 b 的组而不是整个事情。

有什么帮助吗?我的正则表达式生锈了。您可以在http://regexpal.com/上进行测试

0 投票
4 回答
7442 浏览

php - 非贪婪的正则表达式

我需要在这样的注释 php 文件中的一些标签中获取值

所以你可以看到文件有换行符和重复的标签<funcion></funcion>,我需要获取每一个标签,所以我尝试了这样的事情:

这个例子适用于换行符,但它很贪心,所以我一直在搜索并看到这两个解决方案:

但它们都不适合我,不知道为什么

0 投票
4 回答
6673 浏览

regex - 使反向的非贪婪正则表达式的行为与正向相同

这种模式:

针对以下字符串:

火柴:

我们看到非贪婪的行为在向后/向左(全部取走)和向前/向右方向(只取一个)上表现不同。

有没有办法让一开始的非贪婪匹配所有的a, 也尽可能少地匹配?所以它的行为方式与b结尾部分的 at 相同?

0 投票
1 回答
455 浏览

regex - Perl 拆分正则表达式非贪婪适合以“>”作为分隔符

我想用两个或多个“>”分割字符串,分割函数应该在第一个“>”中制动字符串,其他的放在列表中的第二个字符串中。

我试试

但是拆分仍然会在每个“>”中中断

0 投票
2 回答
97 浏览

c# - 使用 Regex Look-Behinds 仅返回第一个匹配项

给定以下 XML 文档:

如何/>使用正则表达式返回第一个?到目前为止,我已经能够使用以下表达式非常接近:

但是,这将匹配/>第一次出现<myGoodSection. 我还尝试将它与消极的后视相结合,以使表达式不贪婪,但它似乎没有任何效果:

编辑:

我正在使用基于 C# 构建的工具来处理正则表达式替换。如果我直接使用,我无法控制我可以使用或不使用多少匹配System.Text.RegularExpressions项。我在这里引用 C# 来阐明我使用的引擎支持的功能。

是的,我知道作为一般做法,我不应该使用 RegEx 来解析 XML。让我们规定,鉴于我目前的范围、要求和约束,这是一个完全可以接受的解决方案(假设实际上有一种方法可以实现它)。

0 投票
5 回答
2881 浏览

java - 为什么这个非贪婪的正则表达式比我想要的更多?

我认为这应该返回“州,国家”,但它正在返回“国家”

为什么它以这种方式工作,以及如何使其返回“州,国家”。我想要这个答案作为正则表达式。

0 投票
1 回答
169 浏览

php - 非贪婪正则表达式
标记 php

我正在尝试从下面的 html 中获取 part#1AMTB00186 的每个实例的特定限定符。我需要它来返回4cyl 2.3L - F23A1, Balance Shaft4cyl 2.3L - F23A1, CAM。我相信我的正则表达式是贪婪的,但我不知道如何使它不贪婪。它始终显示 的第一个限定符2.3L L4, Engine-F23A1。我在用:

谢谢你