Regex 检查空字符串是否符合Matlab中的正则表达式

Regex 检查空字符串是否符合Matlab中的正则表达式,regex,matlab,Regex,Matlab,我知道Matlab函数是我应该用来查找字符串和正则表达式之间匹配的函数 但是,当空字符串符合正则表达式时,它会显示与不符合正则表达式时相同的结果: expr1 = 'b' regexp('a', expr1, 'match') % Returns empty cell: no match regexp('b', expr1, 'match') % Returns cell with 'b' regexp('', expr1, 'match') % Returns empty cell: no

我知道Matlab函数是我应该用来查找字符串和正则表达式之间匹配的函数

但是,当空字符串符合正则表达式时,它会显示与不符合正则表达式时相同的结果:

expr1 = 'b'
regexp('a', expr1, 'match') % Returns empty cell: no match
regexp('b', expr1, 'match') % Returns cell with 'b'
regexp('', expr1, 'match')  % Returns empty cell: no match

expr2 = ''
regexp('a', expr2, 'match') % Returns empty cell: no match
regexp('', expr2, 'match')  % Returns empty cell: but it matches

expr3 = 'b?'
regexp('a', expr3, 'match') % Returns empty cell: no match
regexp('b', expr3, 'match') % Returns cell with 'b'
regexp('', expr3, 'match')  % Returns empty cell: but it matches

expr4 = '|b'
regexp('a', expr4, 'match') % Returns empty cell: no match
regexp('b', expr4, 'match') % Returns cell with 'b'
regexp('', expr4, 'match')  % Returns empty cell: but it matches

expr5 = '.*'
regexp('b', expr5, 'match') % Returns cell with 'b'
regexp('', expr5, 'match')  % Returns empty cell: but it matches
当结果为空单元格时,我无法区分“字符串和正则表达式之间不匹配”和“字符串匹配,但它只是一个空字符串”

如何区分这两种情况?

另一种方法是使用一个函数来测试一个(可能是空的)字符串(不是它的子字符串)是否与正则表达式完全匹配,但我在Matlab中找不到它


编辑:我正在使用Matlab2015a,我尝试用
空格(0)
替换
'
,但结果相同

我不确定您为什么需要这样做,但有一种方法可以区分除第四个匹配表达式
“|b”
之外的所有情况下的“不匹配”和“空字符串匹配”条件。该表达式似乎试图匹配“nothing或
'b'
”,我认为这与您以前的表达式
'b?
没有任何不同,后者是“
'b'
0次或1次”

如果添加到匹配表达式并使用for,则对于非匹配项,将获得一个空单元格
{}
,对于空字符串匹配项,将获得一个包含空字符串
{'}
的单元格:

expr1 = '^b$';
regexp('a', expr1, 'match', 'emptymatch')   % Result = {}
regexp('b', expr1, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr1, 'match', 'emptymatch')    % Result = {}

expr2 = '^$';
regexp('a', expr2, 'match', 'emptymatch')   % Result = {}
regexp('', expr2, 'match', 'emptymatch')    % Result = {''}

expr3 = '^b?$';
regexp('a', expr3, 'match', 'emptymatch')   % Result = {}
regexp('b', expr3, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr3, 'match', 'emptymatch')    % Result = {''}

expr5 = '^.*$';
regexp('b', expr5, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr5, 'match', 'emptymatch')    % Result = {''}

我不知道为什么您可能需要这样做,但有一种方法可以区分除第四个匹配表达式
“|b”
之外的每种情况的“不匹配”和“空字符串匹配”条件。该表达式似乎试图匹配“nothing或
'b'
”,我认为这与您以前的表达式
'b?
没有任何不同,后者是“
'b'
0次或1次”

如果添加到匹配表达式并使用for,则对于非匹配项,将获得一个空单元格
{}
,对于空字符串匹配项,将获得一个包含空字符串
{'}
的单元格:

expr1 = '^b$';
regexp('a', expr1, 'match', 'emptymatch')   % Result = {}
regexp('b', expr1, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr1, 'match', 'emptymatch')    % Result = {}

expr2 = '^$';
regexp('a', expr2, 'match', 'emptymatch')   % Result = {}
regexp('', expr2, 'match', 'emptymatch')    % Result = {''}

expr3 = '^b?$';
regexp('a', expr3, 'match', 'emptymatch')   % Result = {}
regexp('b', expr3, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr3, 'match', 'emptymatch')    % Result = {''}

expr5 = '^.*$';
regexp('b', expr5, 'match', 'emptymatch')   % Result = {'b'}
regexp('', expr5, 'match', 'emptymatch')    % Result = {''}

我想你在这里有点困惑<代码>'是一个空字符数组,没有任何匹配项。那么空白(0)呢?这是一个0个字符的字符串,不是吗?我不明白你所说的
expr2='';regexp(“”,expr2,'match')%返回空单元格:但它匹配
:它在您的大脑中匹配,但与该表达式匹配的任何内容都不匹配,您没有要求匹配任何内容…我现在明白了,没有任何内容可匹配。但是空字符串是用
expr3-5
描述的公认语言编写的,不是吗?有没有一种方法可以知道一个字符串(可能包含0个字符)是否使用正则表达式描述的语言?为了解决一些注释,空字符串在技术上可以满足正则表达式的要求。例如,
'
满足表达式
'b?
,因为它只包含“0或1b”,特别是0<代码>'a'不能满足它。如果你从满足表达式的角度来考虑,与匹配它相比,我认为它更有意义。你可以从技术上区分这两种情况。我想你在这里有点困惑<代码>'是一个空字符数组,没有任何匹配项。那么空白(0)呢?这是一个0个字符的字符串,不是吗?我不明白你所说的
expr2='';regexp(“”,expr2,'match')%返回空单元格:但它匹配
:它在您的大脑中匹配,但与该表达式匹配的任何内容都不匹配,您没有要求匹配任何内容…我现在明白了,没有任何内容可匹配。但是空字符串是用
expr3-5
描述的公认语言编写的,不是吗?有没有一种方法可以知道一个字符串(可能包含0个字符)是否使用正则表达式描述的语言?为了解决一些注释,空字符串在技术上可以满足正则表达式的要求。例如,
'
满足表达式
'b?
,因为它只包含“0或1b”,特别是0<代码>'a'不能满足它。如果你从满足表达式的角度来考虑,与匹配它相比,我认为它更有意义。你可以从技术上区分这两种情况。非常感谢,我没有找到这个空匹配选项!非常感谢,我还没有找到这个空匹配选项!