Regex: сопоставлять только одиночные символы (MySQL)? - PullRequest
0 голосов
/ 06 августа 2011

Мне нужно регулярное выражение в формате POSIX ERE (для MySQL), чтобы соответствовать любому отдельному стоящему символу (между 2 пробелами) в строке:

"abc d e f ghi" должно соответствовать "d e f"

У меня есть только очень базовые знания о регулярных выражениях (в PHP), и я не могу заставить это работать в MySQL ...

ОБНОВЛЕНИЕ: Пожалуйста, смотритеМой другой вопрос о том, что я пытаюсь сделать, и о функции, которую я использую:

MySQL: как удалить все одиночные символы из строки?

Ответы [ 3 ]

1 голос
/ 06 августа 2011

" [a-z] " делает то, что вы хотите?

0 голосов
/ 02 ноября 2012

Вы должны использовать MySQL границы слова :

  • [[: <:]], [[:>:]]

Эти маркеры обозначают границы слов. Они соответствуют началу и конец слова соответственно. Слово - это последовательность символов слова это не предшествует или сопровождается символами слова. Слово символ представляет собой буквенно-цифровой символ в классе alnum или подчеркивание (_).

mysql> SELECT 'слово a' REGEXP '[[: <:]] word [[:>:]]'; -> 1 MySQL>

Так что ваше регулярное выражение MySQL будет [[:<:]][[:alpha:]][[:>:]]. Это будет соответствовать любому стоящему алфавитному символу в MySQL, как, кажется, на самом деле нужно спрашивающему. тем не мение, если это просто непробельный символ, окруженный пробелом, следует использовать RegEx [[:<:]][^[:blank:]][[:>:]].

Обратите внимание, что этот синтаксис границы слова отсутствует в стандарте POSIX ERE , но многие другие инструменты имеют похожий синтаксис; например, GNU grep принимает в своих RE '\ <' и '\>' для обозначения границ левого и правого слова.

0 голосов
/ 06 августа 2011

общий способ posix: / ([a-z]) /ig, но если его MySQL RLIKE, это будет ' [a-z] ' (как в случае, если это зависит от сопоставления столбцов

...