非贪婪正则表达式根据原子在正则表达式中的位置表现贪婪(non atoms)

我遇到了一种情况,我想在正则表达式模式中使用非贪婪原子.*?。

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

set input "Device ID: HOST1
Intece: GigabitEthernet0/1,  Port ID (outgoing port): GigabitEthernet2/43
Device ID: HOST2
Entry address(es):
Intece: 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]
Output:
======== Non-Greedy regex starting with some other patterns ========
{Device ID: HOST1
Intece: GigabitEthernet0/1,  Port ID (outgoing port): GigabitEthernet2/43
Device ID: HOST2
Entry address(es):
Intece: GigabitEthernet0/2,  Port ID (outgoing port): }
======== Non-Greedy regex at first ========
{Device ID: HOST1
Intece: GigabitEthernet0/1,  Port ID (outgoing port): }

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

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

4

它不是很有据(IMO),但the re_syntax man page说这是关于贪婪 / 非贪婪的偏好:

分支具有与其中具有偏好的first量化原子相同的偏好。

(强调我的)

所以如果你有.*作为第一个量词,整个 RE 将是贪婪的,
如果你有.*?作为第一个量词,整个 RE 将是非贪婪的。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(873)
将单选类型输入移动到标签右侧(moveradio)
上一篇
MSVisio是否支持序列图
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(17条)