Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正则表达式未将搜索字符串开头/结尾处的撇号视为单词的一部分_Mysql_Regex_Apostrophe - Fatal编程技术网

Mysql 正则表达式未将搜索字符串开头/结尾处的撇号视为单词的一部分

Mysql 正则表达式未将搜索字符串开头/结尾处的撇号视为单词的一部分,mysql,regex,apostrophe,Mysql,Regex,Apostrophe,我们运行了一个字典,但在搜索字符串开头包含撇号的搜索中遇到了问题。在英语中,像“twas”这样的词非常罕见,但在我们正在处理的语言中,“twas”被认为是一个单词字符,在短语的开头和单词的结尾都非常常见,例如“s” 奇怪的是,ReXEX搜索似乎并没有与此相抗衡,如果它在中间,例如A' BH RD得到所有想要的结果,但是“搜索字符串的开始或结束不被正则表达式作为单词的一部分。 我们已经确定这是正则表达式规范的一部分,仅字母数字字符和uu被视为单词的一部分,但我们想知道是否有可能编写一个正则表达式,

我们运行了一个字典,但在搜索字符串开头包含撇号的搜索中遇到了问题。在英语中,像“twas”这样的词非常罕见,但在我们正在处理的语言中,“twas”被认为是一个单词字符,在短语的开头和单词的结尾都非常常见,例如“s”

奇怪的是,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 |