问题标签 [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 回答
1012 浏览

php - 使一个或零个正则表达式运算符变得贪婪

我有两个句子作为输入。比如说:

现在我想匹配跨度标签内的每个文本部分,如果有的话,颜色。

如果我使用以下正则表达式:

只有与颜色匹配的线。所以我想让我们使用 ?-operator (一或零)。

现在两行/句子都将匹配。可惜颜色已经不匹配了。

问题是为什么?通过使用 ”。*?” 在颜色部分之前,我认为我已经使正则表达式不贪婪,以便颜色部分匹配,如果它存在的话。但正如所说,它不...

0 投票
2 回答
1243 浏览

regex - Tcl/Expect 正则表达式 - 想要变得懒惰(而不是贪婪)

网站新手,请多多包涵。我正在处理 Tcl/Expect 脚本并尝试匹配以下路由器输出中第 4 行的一部分(显示了两个可能的输出)。它通常有一个 IP 地址,但也可能有第二个示例中的字符串:

另一个可能的输出:

我的期望声明,使用正则表达式,如下:

(3 个反斜杠是为了让它们通过 Tcl 解析,并且将 * 传递给正则表达式解释器,以匹配文字星号。)

我的问题是——毫不奇怪——这是一场“贪婪”的比赛,我需要它不要贪婪。请参阅调试输出,其中清楚地说明了这一点:

我希望比赛在第一个 \r\n 停止。

所以,对于非贪婪匹配,我会认为我需要添加一个“?” 如下:

问题是,这似乎不起作用。我从调试输出中得到以下信息:

我已经盯着这个太久了,所以我想我会请求一些帮助。关于我需要做些什么来获得我需要的懒惰匹配的任何想法?请注意,我坚持在此 HP-UX 服务器上仅使用基本正则表达式...扩展正则表达式不可用。

谢谢,詹姆斯

0 投票
3 回答
3234 浏览

regex - vim中的非贪婪多行搜索

我正在尝试搜索 ruby​​ 文件并找到所有方法(在稍后自动替换它们之前)。在 vim 中,我使用以下正则表达式:

但是,即使我使用“{-}”,它也会选择整个文件的内容。

0 投票
5 回答
5186 浏览

c - Posix 正则表达式非贪婪

有没有一种方法可以在 C 中使用非贪婪的正则表达式,就像在 Perl 中使用的那样?我尝试了几件事,但实际上没有用。

我目前正在使用这个匹配 IP 地址和相应 HTTP 请求的正则表达式,但它很贪婪,尽管我使用 *?:

([0-9]{1,3}(\\.[0-9]{1,3}){3})(.*?)HTTP/1.1

在这个例子中,它总是匹配整个字符串:

$ ./regtest

127.0.0.1 GET /test.php HTTP/1.1" 404 525 "-" "Mozilla/5.0 (Windows NT HTTP/1.1

0 投票
3 回答
357 浏览

python - 用于从嵌套组中选择/提取的 Python 正则表达式

我正在尝试使用 CHAR(int) 和 NCHAR(int) 处理字符串,以将这些实例与它们的 ASCII 对应部分进行转换。一个例子是这样的:

请注意,我不想对 VARCHAR(int) 做任何事情,只对 CHAR(int) 和 NCHAR(int) 部分做任何事情。以上应翻译为:

|(SELECT TOP 1 CAST(name AS VARCHAR(8000)) FROM (SELECT TOP 1 colid, name FROM [Projects]..[syscolumns] WHERE xtype=U AND id = OBJECT_ID(EN_Empl)

请注意,应删除 CHAR(int) 或 NCHAR(int) 两侧的任何“+”。我尝试了以下方法:

其中str= 必须处理的原始字符串。

不知何故,VARCHAR(8000) 正在被拾取。如果我调整正则表达式,xtype 之后的“=”就会消失,而不仅仅是 CHAR(int) 或 NCHAR(int) 实例两侧的空格和“+”。

希望有人能把我拉出来。

其他示例字符串:

细绳"char(124)+(Select Top 1 cast(name as varchar(8000)) from (Select Top 1 colid,name From [Projects]..[syscolumns] Where id = OBJECT_ID(NCHAR(69)+NCHAR(78)+NCHAR(95)+NCHAR(69)+NCHAR(109)+NCHAR(112)+NCHAR(108)))"

正则表达式:r'(\bn?char\((\d+)\)(?:\s*\+\s*)?)'

结果:"|(Select Top 1 cast(name as varchar(8000)) from (Select Top 1 colid,name From [Projects]..[syscolumns] Where id = OBJECT_ID(ENCHAR(78)+NCHAR(95)+NCHAR(69)+NCHAR(109)+NCHAR(112)+NCHAR(108)))"

0 投票
2 回答
163 浏览

javascript - 为什么是正则表达式.*?只匹配javascript中的空字符串?

我认为.*?是非贪婪的,它应该返回a

0 投票
3 回答
1686 浏览

javascript - Javascript replace() 正则表达式太贪心

我正在尝试清理 HTML 输入字段。我想保留一些标签,但不是全部,所以我不能只.text()在读取元素值时使用。我在 Safari 中的 JavaScript 中使用正则表达式时遇到了一些问题。这是代码片段(我从另一个 SO 线程答案中复制了这段正则表达式):

这是失败的示例输入:

这个想法是href将被拉出并作为纯文本输出到将被链接的文本旁边。所以上面的输出最终应该是这样的:

但是,正则表达式在第一场比赛中一直抓取到第二个</a>标签,所以我丢失了第一行输出。(实际上,只要锚元素相邻,它就会抓取到列表的最下方。)输入是一个长字符串,而不是用 CR/LF 或任何东西分割成行。

我尝试过使用这样的非贪婪标志(注意第二个问号):

但这似乎并没有改变任何东西(至少在我尝试的少数测试器/解析器中没有,其中之一在这里: http ://refiddle.com )。也尝试过该/U标志,但没有帮助(或者这些解析器没有识别它)。

有什么建议么?

0 投票
4 回答
721 浏览

python - Python 非贪婪正则表达式并不完全符合我的预期

字符串:XXaaaXXbbbXXcccXXdddOO

我想匹配以 'XX' 开头以 'OO' 结尾的最小字符串。

所以我写了非贪婪的注册:r'XX.*?OO'

我以为它会返回['XXdddOO']但它太“贪婪”了。

然后我知道我一定是弄错了,因为上面的限定符将首先匹配“XX”,然后显示它是“非贪婪的”。

但我仍然想弄清楚我怎样才能直接得到我的结果['XXdddOO']。任何回复表示赞赏。

到现在为止,重点其实不是非贪心,或者说,是我眼中的非贪心:左限定符(XX)和右限定符( OO). 当然事实是字符串是从左到右处理的。

0 投票
1 回答
261 浏览

regex - 如何使我的 Regex 的一部分不贪婪?

最终解决方案


原始问题

正则表达式

图案

此正则表达式返回“66 23 Britton Drive”。我想返回“23 Britton Drive”。我尝试了以下正则表达式的变体:

更多不起作用的模式

有效的模式

0 投票
1 回答
179 浏览

html - RegEx HTML 与惰性通配符匹配太多

正则表达式:

HTML:

为什么比赛包括这个?

示例链接