问题标签 [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.
c++ - 使用正则表达式提取引用和未引用的值
我正在尝试<tag>=<value>
使用正则表达式解析一个类型的字符串,但是遇到了一些添加对引用值的支持的问题。这个想法是任何未引用的值都应该被修剪掉前导/尾随空格,这样[ Hello ]
就变成[Hello]
了(请忽略方括号。)
但是,当引用该值时,我希望删除包括双引号在内的任何内容,但不再赘述,因此[ " Hello World " ]
将变为[" Hello World "]
到目前为止,我已经提出了以下带有模式匹配的代码(请注意,某些字符已被转义或双重转义,以避免将它们解释为三字符图或其他 C 格式字符。)
取出双重转义,这分解为:
^
- 线的开始。\s*
- 可选数量的空白。([a-zA-Z0-9_-]+)
- 一个或多个字母数字或破折号或下划线。这被捕获为标签。\s*
- 可选数量的空白。=
- 一个“相等”的符号。\s*
- 可选数量的空白。"??
- 一个可选的双引号(非贪婪)。([%:\a-zA-Z0-9 /\._]+?)
- 一个或多个字母数字或空格、下划线、百分比、冒号、句点、正斜杠或反斜杠。这被捕获为值(非贪婪)。"??
- 一个可选的双引号(非贪婪)。\s*
- 可选数量的空白。$
- 行结束
对于中的示例调用main()
,我希望得到:
但我实际得到的是:
所以它几乎是正确的,但由于某种原因,第一个引号在输出值中徘徊,即使我特别将正则表达式的值部分与它外面的引号括起来。
regex - 使用“?”的惰性正则表达式背后的逻辑?
这是我的问题:
例如,如果您的模式是:
美国广播公司?
那么这将匹配: ab abc 但不是abd as c?意思是:如果有交流,匹配,如果没有,不用担心..
所以说你有这样的事情:
->sometext<-->somemoretext<-
如果你有这样的模式:(这是贪婪的) ->.*<-那么它只会匹配:
->sometext<-->sometext<-
但是,如果您的模式是惰性的: ->.*?<-那么它将匹配: ->sometext< - AND ->sometext<- ...
如果, ?意思是,诸如是否/不是(如第一个示例),那么第二个示例背后的逻辑是什么,有人可以解释一下吗?如果模式是 .*,为什么它会在 ->sometext-< 中停止?
regex - 使用正则表达式消除文件中的块(iCal 文件中的分类事件)
我有一个 .ics 文件,我想根据事件类别创建单独的新 .ics 文件(我无法让 egroupware 仅导出一个类别的事件,我想根据类别创建新日历)。我的预期方法是重复消除除一类事件之外的所有事件,然后使用 EditPad Lite 7 (Windows) 保存文件。
我正在努力使正则表达式正确。.+? 仍然太贪婪并且否定字符串(例如从一个类别中消除除事件之外的所有事件)也不起作用。
样本
正则表达式BEGIN:VEVENT.+?CATEGORIES:Sports.+?END:VEVENT
应该只匹配体育赛事,但它会捕获从第一个BEGIN
到第一个END
类别的所有内容。
编辑:否定也不起作用:BEGIN:VEVENT.+?((?!CATEGORIES:Sports).).+?END:VEVENT
.
我错过了什么?任何指针都受到高度赞赏。
python - python中大多数非贪婪的正则表达式匹配(或者只是一般的正则表达式
我有一个问题,我的正则表达式匹配太多。我已经尝试让它尽可能不贪婪。我的RE是:
意义
“定义主机”后跟任何空格或制表符,后跟“{”。任何文本和换行符,直到任意数量的空格或制表符后跟“host_name”,然后是任意数量的空格或制表符,后跟“HOST_B”。任何文本加上换行符,直到任何空格或制表符后跟“}”
我的文字是
匹配从第一个定义到 host_b 的结束括号。它没有得到 host_c 的组(它不应该得到 host_c),但是我只想要主机 b 的组而不是整个事情。
有什么帮助吗?我的正则表达式生锈了。您可以在http://regexpal.com/上进行测试
php - 非贪婪的正则表达式
我需要在这样的注释 php 文件中的一些标签中获取值
所以你可以看到文件有换行符和重复的标签<funcion></funcion>
,我需要获取每一个标签,所以我尝试了这样的事情:
这个例子适用于换行符,但它很贪心,所以我一直在搜索并看到这两个解决方案:
但它们都不适合我,不知道为什么
regex - 使反向的非贪婪正则表达式的行为与正向相同
这种模式:
针对以下字符串:
火柴:
我们看到非贪婪的行为在向后/向左(全部取走)和向前/向右方向(只取一个)上表现不同。
有没有办法让一开始的非贪婪匹配所有的a
, 也尽可能少地匹配?所以它的行为方式与b
结尾部分的 at 相同?
regex - Perl 拆分正则表达式非贪婪适合以“>”作为分隔符
我想用两个或多个“>”分割字符串,分割函数应该在第一个“>”中制动字符串,其他的放在列表中的第二个字符串中。
我试试
但是拆分仍然会在每个“>”中中断
c# - 使用 Regex Look-Behinds 仅返回第一个匹配项
给定以下 XML 文档:
如何/>
使用正则表达式返回第一个?到目前为止,我已经能够使用以下表达式非常接近:
但是,这将匹配/>
第一次出现<myGoodSection
. 我还尝试将它与消极的后视相结合,以使表达式不贪婪,但它似乎没有任何效果:
编辑:
我正在使用基于 C# 构建的工具来处理正则表达式替换。如果我直接使用,我无法控制我可以使用或不使用多少匹配System.Text.RegularExpressions
项。我在这里引用 C# 来阐明我使用的引擎支持的功能。
是的,我知道作为一般做法,我不应该使用 RegEx 来解析 XML。让我们规定,鉴于我目前的范围、要求和约束,这是一个完全可以接受的解决方案(假设实际上有一种方法可以实现它)。
java - 为什么这个非贪婪的正则表达式比我想要的更多?
我认为这应该返回“州,国家”,但它正在返回“国家”
为什么它以这种方式工作,以及如何使其返回“州,国家”。我想要这个答案作为正则表达式。
php - 非贪婪正则表达式标记 php
我正在尝试从下面的 html 中获取 part#1AMTB00186 的每个实例的特定限定符。我需要它来返回4cyl 2.3L - F23A1, Balance Shaft
和4cyl 2.3L - F23A1, CAM
。我相信我的正则表达式是贪婪的,但我不知道如何使它不贪婪。它始终显示 的第一个限定符2.3L L4, Engine-F23A1
。我在用:
谢谢你