Mysql 正则表达式未将搜索字符串开头/结尾处的撇号视为单词的一部分
我们运行了一个字典,但在搜索字符串开头包含撇号的搜索中遇到了问题。在英语中,像“twas”这样的词非常罕见,但在我们正在处理的语言中,“twas”被认为是一个单词字符,在短语的开头和单词的结尾都非常常见,例如“s”Mysql 正则表达式未将搜索字符串开头/结尾处的撇号视为单词的一部分,mysql,regex,apostrophe,Mysql,Regex,Apostrophe,我们运行了一个字典,但在搜索字符串开头包含撇号的搜索中遇到了问题。在英语中,像“twas”这样的词非常罕见,但在我们正在处理的语言中,“twas”被认为是一个单词字符,在短语的开头和单词的结尾都非常常见,例如“s” 奇怪的是,ReXEX搜索似乎并没有与此相抗衡,如果它在中间,例如A' BH RD得到所有想要的结果,但是“搜索字符串的开始或结束不被正则表达式作为单词的一部分。 我们已经确定这是正则表达式规范的一部分,仅字母数字字符和uu被视为单词的一部分,但我们想知道是否有可能编写一个正则表达式,
奇怪的是,ReXEX搜索似乎并没有与此相抗衡,如果它在中间,例如A' BH RD得到所有想要的结果,但是“搜索字符串的开始或结束不被正则表达式作为单词的一部分。
我们已经确定这是正则表达式规范的一部分,仅字母数字字符和uu被视为单词的一部分,但我们想知道是否有可能编写一个正则表达式,它也将撇号视为单词的一部分 这是我们目前得到的:-- 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
非常欢迎任何建议:我认为您应该提供自己对单词字符的定义,而不是依赖默认的ICE单词边界[[::]。发件人: 单词是一系列单词字符,前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线 这就意味着:“^ |[^[:alnum:][uuz]” 字符串的结尾应该是:“[^[:alnum:][u]|$”,其中$表示字符串的结尾 您只需修改此项即可在character类中添加单引号,如: 开头:“^ |[^[:alnum:][u3]” 结束:“[^[:alnum:][u124;]|$” 这是您的正则表达式:
SELECT (val REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)'));
模式MySQL v5.6
问题1
你在测试整个专栏是否是一个单词吗?或者你是在检查一个较长字符串中的单词吗?引用的“cats”是一个单词吗?在您的测试用例中,它将是“猫”。猫也是如此。如果GMB的回答不充分,请提供一个较长的应该通过的单词列表和一个不通过的单词列表。
SELECT (val REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)'));
Select ('cat''s'
REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)')) res;
| res |
| --- |
| 1 |
Select ('''cat''s'
REGEXP CONCAT('(^|[^[:alnum:]_''])', '''cat''s', '([^[:alnum:]_'']|$)' )) res;
| res |
| --- |
| 1 |
Select ('_cat''s'
REGEXP CONCAT('(^|[^[:alnum:]_''])', '_cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res |
| --- |
| 1 |
Select ('-cat''s'
REGEXP CONCAT('(^|[^[:alnum:]_''])', '-cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res |
| --- |
| 1 |
Select (' cat''s'
REGEXP CONCAT('(^|[^[:alnum:]_''])', ' cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res |
| --- |
| 1 |
Select ('cat'''
REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''' , '([^[:alnum:]_'']|$)' )) res;
| res |
| --- |
| 1 |