#mysql #regex
#mysql #регулярное выражение
Вопрос:
я безуспешно пытаюсь это сделать:
select * from table where name regexp '^[:alpha:]{2}$'
пожалуйста, помогите мне?
Комментарии:
1. ищутся только два результата совпадения
Ответ №1:
Вероятно, между двумя словами должен быть некоторый пробел, верно? Попробуйте
select * from table where name regexp '^[[:alpha:]] [[:space:]]*[[:alpha:]]*$'
[[:alpha:]]
соответствует одному или нескольким буквенным символам[[:space:]]*
соответствует нулю или более пробелам. (Вместо этого вы можете использовать[[:blank:]]*
для сопоставления только пробелов и табуляции или[[ ]]*
только для пробелов.)[[:alpha:]]*
соответствует нулю или более буквенным символам
Таким образом, это должно принимать строки типа
"foo"
"foo "
"foo "
"foo bar"
"foo bar"
и отклоняют строки, подобные
" foo"
" foo "
"foo bar baz"
Комментарии:
1. спасибо, но для того, чтобы это сработало, мне пришлось использовать, например, [[:alpha:]] вместо просто [:alpha:]
Ответ №2:
select * from table where name regexp '^[:alpha:][:blank:]^[:alpha:]*$'
Комментарии:
1.Это не может сработать, поскольку каждое выражение в скобках будет соответствовать только одному символу, а регулярное выражение содержит два обязательных
^
привязки.