我很难使用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。
答案 0 :(得分:1)
答案 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()
之前。