gpt4 book ai didi

ruby - 正则表达式扫描结果

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:01 24 4
gpt4 key购买 nike

有人知道为什么我会根据模式的顺序得到不同的结果吗?

list1 = ["AA1", "AA2","AA", "AA+"]
list2 = ["AA1", "AA2","AA+", "AA"]
results1 = "somethin with AA+ in it".scan(Regexp.union(list1))
results2 = "somethin with AA+ in it".scan(Regexp.union(list2))

结果 1 输出“AA”结果2输出“AA+”

我可能误解了 scan 的工作原理,但我希望它每次都返回,因此返回“AA”和“AA+”。我也不明白为什么输出会根据所用字符串的顺序而变化。

最佳答案

在 NFA 正则表达式的交替组中,第一个最左边的分支“获胜”。参见 Alternation with The Vertical Bar or Pipe Symbol以获得更详细的解释。

regexes you have

正则表达式 1:(?-mix:AA1|AA2|AA|AA\+)
正则表达式 2:(?-mix:AA1|AA2|AA\+|AA)

如果你使用第一个正则表达式,你会得到 AA 因为 |AA| 分支首先匹配,而其他的不针对输入进行测试,匹配被返回并且正则表达式索引前进。

第二个正则表达式产生AA+,因为|AA\+|先匹配,然后返回匹配,|AA不是偶数测试。

关于ruby - 正则表达式扫描结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38184881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com