首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非贪婪的正则表达式基于原子在正则表达式中的位置而表现为贪婪。

非贪婪的正则表达式基于原子在正则表达式中的位置而表现为贪婪。
EN

Stack Overflow用户
提问于 2015-06-10 09:08:50
回答 1查看 753关注 0票数 3

我遇到了一种情况,我想在regex模式中使用非贪婪的原子.*?

代码语言:javascript
复制
set input "Device ID: HOST1
Interface: GigabitEthernet0/1,  Port ID (outgoing port): GigabitEthernet2/43
Device ID: HOST2
Entry address(es):
Interface: GigabitEthernet0/2,  Port ID (outgoing port): GigabitEthernet2/43
"

puts "======== Non-Greedy regex starting with some other patterns ========"
puts [ regexp -inline {Device\s+ID:.*?outgoing\s+port\):\s+} $input]
puts "======== Non-Greedy regex at first ========"
puts [ regexp -inline {.*?outgoing\s+port\):\s+} $input]

输出:

代码语言:javascript
复制
======== Non-Greedy regex starting with some other patterns ========
{Device ID: HOST1
Interface: GigabitEthernet0/1,  Port ID (outgoing port): GigabitEthernet2/43
Device ID: HOST2
Entry address(es):
Interface: GigabitEthernet0/2,  Port ID (outgoing port): }
======== Non-Greedy regex at first ========
{Device ID: HOST1
Interface: GigabitEthernet0/1,  Port ID (outgoing port): }

.*?outgoing\s+port\):\s+匹配到第一次匹配时,模式Device\s+ID:.*?outgoing\s+port\):\s+不会在匹配的第一次出现时停止。

为什么非贪婪匹配的行为会因为原子的放置而受到影响?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-10 10:21:41

这并不是很好的记录(国际海事组织),但是语法手册页说这是关于贪婪/非贪婪偏好的:

分支具有与具有偏好的第一量化原子相同的偏好。

(强调地雷)

所以如果你用.*作为第一个量词,那么整个RE都是贪婪的,

如果你用.*?作为第一个量词,那么整个RE是不贪婪的.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30751921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档