如果变量前有连字符,则REGEXP不匹配

时间:2016-07-01 19:55:59

标签: mysql regex

我很难使用MySQL REGEX正确匹配变量($ myvar)。

我的第一个想法是匹配单词(\ b),但这将匹配我在下面的示例中的“testtype”和“edit-testtype”,我不想要:

SELECT "edit-testtype, themes, upload, plugin-editor" REGEXP '\\b$myvar\\b';

经过大量的互联网搜索,我以为我得到了答案:

SELECT "edit-testtype, themes, upload, plugin-editor" REGEXP '\^(?!-)\\b$myvar\\b';

但它会在字符串中的任何其他单词上失败。我想我需要的是一个REGEX,它不会匹配前面连字符/破折号的任何$ myvar。

3 个答案:

答案 0 :(得分:1)

http://regexr.com/3do1b

试试这个正则表达式:^[^-]+$

我没有测试过这个。

答案 1 :(得分:1)

如果您想尝试正则表达式,可以使用

$myvar

如果您的[包含(+(^|[^-])等特殊字符,则无法使用此功能。

请注意,[[:<:]]匹配字符串的开头或非连字符,[[:>:]]匹配前导字边界,($|[[:>:]][^-])匹配尾随字边界。

$部分匹配2个备选:字符串的结尾({{1}})或尾随字边界加上连字符以外的字符。

答案 2 :(得分:0)

您可以使用此正则表达式(带edit-testtype的示例):

(^|, )edit-testtype(,|$)

但是,由于您实际上是在尝试在逗号分隔列表中查找元素,因此可以使用find_in_set

select find_in_set($myvar, "edit-testtype,themes,upload,plugin-editor") > 0

你只需要确保逗号后面没有空格。如果您无法更改,请使用普通替换:

replace("edit-testtype, themes, upload, plugin-editor", ", ", ",")

...在应用find_in_set()之前。