正则表达式:第一场比赛与贪婪比赛

时间:2014-03-21 15:54:30

标签: regex matlab vertica

考虑正则表达式\d*

如果我尝试将其与字符串JJJ123匹配,则Vertica的正则表达式函数表示它与开头的宽度为零的字符串匹配。

如果我在matlab中尝试,则会报告从字符1开始的匹配。

Vertica文档说它的正则表达式引擎是PCRE。我在matlab上找不到多少,但我发现它与perl的相似。

对于类似perl的正则表达式引擎,哪种行为更为标准?

1 个答案:

答案 0 :(得分:3)

Matlab的regexp有一个emptymatch选项,用于控制是否允许整个正则表达式匹配空字符串。它默认为关闭(“noemptymatch”)。请参阅help regexp

Vertica在开头匹配0长空字符串是我所知道的大多数正则表达方言的正常行为,包括任何类似Perl的方言。

要获得与Vertica相同的行为,它可以匹配0长度的字符串,请在'emptymatch'调用中传递regexp选项。同时传递'once'以防止它匹配字符串中每个字符之间的空格。

[a,b,c,d] = regexp('JJJ123', '\d*', 'emptymatch', 'once')