gpt4 book ai didi

regex - Matlab:正则表达式:除了:函数末尾需要点 '.'

转载 作者:行者123 更新时间:2023-12-04 15:04:21 24 4
gpt4 key购买 nike

为什么以下用于查找所有实例的正则表达式 EXCEPT abd 需要在给定模式的末尾添加一个点才能按预期运行:

>> regexp({'abc';'abd'},'^(?!abd$)')
ans =
{
[1,1] = [](1x0)
[2,1] = [](1x0)
}

>> regexp({'abc';'abd'},'^(?!abd$).')
ans =
{
[1,1] = 1
[2,1] = [](1x0)
}

这也适用于不使用单元格的更简单的情况:

>> regexp('abc','^(?!abd$)')
ans = [](1x0)

>> regexp('abc','^(?!abd$).')
ans = 1

最佳答案

查看regexp reference page就清楚了并看到默认情况下不返回空匹配项。

请注意,^(?!abd$) 模式是两个非消耗 模式的序列,字符串 anchor (^) 和否定前瞻 ((?!abd$)),匹配字符串中未紧跟 abd 和字符串结尾的位置。

当你在 lookahead 之后添加一个 . 时,你向正则表达式引入了一个 consuming 部分,现在它实际上匹配并使用任何单个字符,然后是 regexp返回非空匹配项。

您只需通过添加 emptymatch 选项来覆盖默认行为:

>> regexp({'abc';'abd'},'^(?!abd$)', 'emptymatch'
)
ans =
{
[1,1] = 1
[2,1] = [](1x0)
}

关于regex - Matlab:正则表达式:除了:函数末尾需要点 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66444625/

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