Имена регулярных выражений Mysql, содержащие максимум два слова

#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.Это не может сработать, поскольку каждое выражение в скобках будет соответствовать только одному символу, а регулярное выражение содержит два обязательных ^ привязки.