【发布时间】:2019-01-19 00:12:38
【问题描述】:
我们运行字典时遇到了搜索字符串开头包含撇号的问题。在英语中,像 'twas 这样的单词非常少见,但在我们正在处理的语言中,' 被认为是一个单词字符,并且在短语的开头非常常见(例如 's) 以及单词的末尾(例如 a')。
奇怪的是,如果 RegEx 搜索位于中间(例如 air a' bhòrd 获得所有期望的结果)但 ' 在搜索的开头或结尾字符串不会被 RegEx 视为单词的一部分。
我们已经确定这是 RegEx 规范的一部分(只有字母数字字符和 _ 被视为单词的一部分)但我们想知道是否可以编写一个 RegEx 表达式,同时将撇号视为一句话?
这是我们目前得到的:
-- Demonstration on MySQL 5.6.21 Community
Select ('cat''s' REGEXP CONCAT('[[:<:]]', 'cat''s', '[[:>:]]'));
-- returns 1
Select ('''cat''s' REGEXP CONCAT('[[:<:]]' ,'''cat''s' ,'[[:>:]]' ));
-- returns 0
Select ('_cat''s' REGEXP CONCAT('[[:<:]]' ,'_cat''s' ,'[[:>:]]' ));
-- returns 1
Select ('-cat''s' REGEXP CONCAT('[[:<:]]' ,'-cat''s' ,'[[:>:]]' ));
-- returns 0
Select (' cat''s' REGEXP CONCAT('[[:<:]]' ,' cat''s' ,'[[:>:]]' ));
-- returns 0
Select ('cat''' REGEXP CONCAT('[[:<:]]' ,'cat''' ,'[[:>:]]' ));
-- returns 0
非常欢迎任何建议:)
【问题讨论】:
-
您是否正在测试整个列是否为“单词”?还是您在较长的字符串中检查“单词”?
-
引用的
'cats'是“单词”吗?在您的测试用例中,它将是'''cats'''。"cats"同上。 -
如果 GMB 的回答结果不充分,请提供更长的应该通过的“单词”列表和不通过的“单词”列表。
标签: mysql regex apostrophe