我知道Matlab的regexp
函数是我用来查找字符串和正则表达式之间匹配项的函数。
但是,当一个空字符串确实适合该正则表达式时,它显示的结果与不适合它的结果相同:
INSERT INTO SCHEDULE
SELECT '2018-08-13', MEMBER_PROFILE.MOW_ID, 0, MEMBER_PROFILE.FUNDING, NULL,NULL,NULL, 20, NULL
FROM
MEMBER_PROFILE
WHERE MEMBER_PROFILE.FUNDING IN (6,7,8,10,18)
AND MEMBER_PROFILE.MOW_ID NOT IN (SELECT SCHEDULE.MOW_ID FROM SCHEDULE WHERE BKFST > 0 AND DATE ='2018-08-13');
当结果为空单元格时,我无法区分“字符串和正则表达式之间没有匹配项”和“字符串匹配,但这只是一个空字符串”。
如何区分这两种情况?
做我想要的另一种方法是拥有一个测试(可能为空)字符串(而不是其子字符串)是否与正则表达式完全匹配的函数,但是我在Matlab中找不到它。
编辑:我正在使用Matlab2015a,但我确实尝试将INSERT INTO SCHEDULE
(Column1, Column2 ...etc
SELECT ...etc
替换为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
,但结果相同。
答案 0 :(得分:2)
我不确定您为什么需要这样做,但是除了第四个匹配表达式{{1}之外,您有一种方法可以区分每种情况的“不匹配”和“空字符串匹配”条件}。该表达式似乎尝试匹配“ nothing or '|b'
”,我认为这与您之前的表达式'b'
没什么不同,后者是“ 'b?'
0倍或1倍”
如果将beginning and end anchors添加到您的匹配表达式中,并为'emptymatch'
option使用regexp
,那么对于不匹配的内容,您将获得一个空单元格'b'
,并且该单元格包含空字符串{}
与您的空字符串匹配:
{''}