SQL REGEXP 搜索忽略“.”
SQL REGEXP search ignoring '.'
我正在尝试对数据库中的所有内容执行 REGEXP 搜索,并且正在尝试获取所有 .cxx 文件类型。我目前的搜索就像
SELECT * FROM sourcefile
WHERE idowner IS NULL AND name REGEXP '.cxx'
当前的输出类似于
filecxx.txt
file.cxx
test.cxx
但是我只想显示 .cxx 文件,而不仅仅是名称中带有 cxx 的文件,因此预期输出为
file.cxx
test.cxx
您的输出是正确的,因为您使用的是通配符 .
,这意味着任何字符然后是 cxx
,这就是为什么您还匹配 ecxx
.
你必须转义点,像这样:
SELECT * FROM sourcefile
WHERE idowner IS NULL AND name REGEXP '[.]cxx'
REGEXP
可以 return 部分匹配,不需要全字符串匹配。
因此,如果需要匹配以.cxx
结尾的字符串,则需要
AND name REGEXP '[.]cxx$'
其中 [.]
匹配文字 .
(如果按原样使用,它匹配任何字符)并且 $
匹配字符串的结尾。
或者直接使用LIKE
AND name LIKE '%.cxx'
我正在尝试对数据库中的所有内容执行 REGEXP 搜索,并且正在尝试获取所有 .cxx 文件类型。我目前的搜索就像
SELECT * FROM sourcefile
WHERE idowner IS NULL AND name REGEXP '.cxx'
当前的输出类似于
filecxx.txt
file.cxx
test.cxx
但是我只想显示 .cxx 文件,而不仅仅是名称中带有 cxx 的文件,因此预期输出为
file.cxx
test.cxx
您的输出是正确的,因为您使用的是通配符 .
,这意味着任何字符然后是 cxx
,这就是为什么您还匹配 ecxx
.
你必须转义点,像这样:
SELECT * FROM sourcefile
WHERE idowner IS NULL AND name REGEXP '[.]cxx'
REGEXP
可以 return 部分匹配,不需要全字符串匹配。
因此,如果需要匹配以.cxx
结尾的字符串,则需要
AND name REGEXP '[.]cxx$'
其中 [.]
匹配文字 .
(如果按原样使用,它匹配任何字符)并且 $
匹配字符串的结尾。
或者直接使用LIKE
AND name LIKE '%.cxx'