regex - Matlab:正则表达式:除了:需要点“。” 最终功能
问题描述
为什么以下正则表达式查找所有实例 EXCEPTabd
需要在给定模式的末尾添加一个点才能按预期运行:
>> 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
参考页面并看到默认情况下不返回空匹配项后,这一点就很清楚了。
请注意,^(?!abd$)
模式是两个非消耗模式的序列,一个字符串锚点的开头 ( ^
) 和一个与字符串中的位置匹配的负前瞻 ( (?!abd$)
),该位置不紧跟abd
字符串的结尾和字符串的结尾。
当您.
在前瞻之后添加 a 时,您将消耗部分引入正则表达式,现在它实际上匹配并消耗任何单个字符,然后正则表达式返回非空匹配。
您只需要通过添加emptymatch
选项来覆盖默认行为:
>> regexp({'abc';'abd'},'^(?!abd$)', 'emptymatch'
)
ans =
{
[1,1] = 1
[2,1] = [](1x0)
}
推荐阅读
- java - 无论如何要在 minecraft forge 1.12.2 中“等待 1 秒”?
- angular - 角度形式总是返回无效?
- c# - 检查哪些属性将被更新(来自请求正文)OData c#
- c# - 如何删除一个对象的实例,以便一个新的、更新的可以接管?
- mysql - 如何确定mysql中字符串列中的NULL和实际字符串“NULL”之间的差异
- c# - .NET Core 自访问查询过滤器
- django - 在以下 django 代码中使用 ('/')
- python - 如何从函数返回两个参数
- c# - SQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型
- swift - 如何使 SKSpriteNode 与 SKLabelNode 发生碰撞?SK精灵