正则表达式不匹配正确的字符串
Regex not matching correct string
我正忙于为商家的特定名称构建一个查找 table。我尝试使用以下正则表达式,但它返回的结果少于 Netezza SQL 中的标准 "like" 函数。请参考以下:
SQL Like function: where trim(upper(a.MRCH_NME)) like '%CNA %' -- returns 4622 场比赛
Netezza 中的正则表达式函数 SQL:其中 array_combine(regexp_extract_all(trim(upper(a.MRCH_NME)),'.*CNA\s','i'),'|') = 'CNA' -- returns 2226 场比赛
我查看了两个结果集,发现不匹配如下字符串:
!C CNA INT ARR
*CNA PLATZ 0400
015764 CNA CRAD
C#CNA PARK 0
我使用了以下正则表达式:/.*[=34=]'/
知道为什么上面的字符串没有作为匹配返回吗?
谢谢。
您可能应该使用 regexp_like
:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(MRCH_NME, 'CNA[ ]', 'i');
这在逻辑上与以下使用 LIKE
的查询相同:
SELECT *
FROM yourTable
WHERE MRCH_NME LIKE '%CNA ';
在我看来,问题更多出在您的代码上,而不是正则表达式上。查看:like '%CNA %'
returns 包含 的所有条目 CNA
子字符串后跟条目内任意位置的文字 space。 '.*CNA\s'
正则表达式匹配除换行符之外的任何 0+ 个字符,后跟 CNA
和 **any whitespace char*.
累积this reference, \s
匹配 " 白色 space 字符。白色 space 定义为 [\t\n\f\r\p{Z}]
.
因此,您实际上应该只使用
WHERE REGEXP_LIKE(MRCH_NME, 'CNA ', 'i')
或者,最好进行单词边界检查:
WHERE REGEXP_LIKE(MRCH_NME, '\bCNA\b', 'i')
其中 \b
标记了从单词到非单词以及从非单词到单词字符的转换,从而确保了整个单词搜索并证明了正则表达式的使用。
如果不需要整词匹配商户名,使用正则LIKE
和'%CNA %'
,效率会更高。
我正忙于为商家的特定名称构建一个查找 table。我尝试使用以下正则表达式,但它返回的结果少于 Netezza SQL 中的标准 "like" 函数。请参考以下:
SQL Like function: where trim(upper(a.MRCH_NME)) like '%CNA %' -- returns 4622 场比赛
Netezza 中的正则表达式函数 SQL:其中 array_combine(regexp_extract_all(trim(upper(a.MRCH_NME)),'.*CNA\s','i'),'|') = 'CNA' -- returns 2226 场比赛
我查看了两个结果集,发现不匹配如下字符串:
!C CNA INT ARR
*CNA PLATZ 0400
015764 CNA CRAD
C#CNA PARK 0
我使用了以下正则表达式:/.*[=34=]'/
知道为什么上面的字符串没有作为匹配返回吗?
谢谢。
您可能应该使用 regexp_like
:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(MRCH_NME, 'CNA[ ]', 'i');
这在逻辑上与以下使用 LIKE
的查询相同:
SELECT *
FROM yourTable
WHERE MRCH_NME LIKE '%CNA ';
在我看来,问题更多出在您的代码上,而不是正则表达式上。查看:like '%CNA %'
returns 包含 的所有条目 CNA
子字符串后跟条目内任意位置的文字 space。 '.*CNA\s'
正则表达式匹配除换行符之外的任何 0+ 个字符,后跟 CNA
和 **any whitespace char*.
累积this reference, \s
匹配 " 白色 space 字符。白色 space 定义为 [\t\n\f\r\p{Z}]
.
因此,您实际上应该只使用
WHERE REGEXP_LIKE(MRCH_NME, 'CNA ', 'i')
或者,最好进行单词边界检查:
WHERE REGEXP_LIKE(MRCH_NME, '\bCNA\b', 'i')
其中 \b
标记了从单词到非单词以及从非单词到单词字符的转换,从而确保了整个单词搜索并证明了正则表达式的使用。
如果不需要整词匹配商户名,使用正则LIKE
和'%CNA %'
,效率会更高。