2010-01-02 4 views
0

таблица содержит строку "Hello world!"Как написать MySQL REGEXP?

Думая о * в качестве обычного символа подстановки, как я могу написать регулярное выражение, которое будет вычисляться в верно для 'W*rld!', но ложно для 'H*rld!' поскольку H является частью другого слова. 'W*rld' должны вычисляться в ложь, а из-за задней '!'

ответ

1

Вы можете использовать регулярные выражения в MySQL:

SELECT 'Hello world!' REGEXP 'H[[:alnum:]]+rld!' 
0 
SELECT 'Hello world!' REGEXP 'w[[:alnum:]]+rld!' 
1 

Более подробную информацию о синтаксисе можно найти here.

+0

Спасибо, работает как шарм. –

2

Если вы просто ищете, чтобы соответствовать слово world, то сделать это:

SELECT * FROM `table` WHERE `field_name` LIKE "w_rld!"; 

_ позволяет для одного символа подстановки.

Edit: Я понимаю, что OP просил это решение с REGEXP, но так как тот же результат может быть достигнут без с использованием регулярных выражений, я представил это как жизнеспособное решение, которое должно выполнять быстрее, чем REGEXP.

+1

Согласен, но поскольку результат может быть достигнут * без * REGEXP, не было бы правильным способом в производственной среде использовать решение без REGEXP? –

+0

Итак, что быстрее? 'REGEXP' или' LIKE'? – Nirmal

+0

@Doug Neiner: Конечно, вы должны предпочесть LIKE над REGEXP, если они будут работать. Но что, если примеры, которые он дал, были просто упрощенными примерами, и на самом деле он должен соответствовать более сложным вещам, которые нельзя сделать с помощью LIKE? Производительность LIKE не имеет значения, если она дает неверный результат. –

8

Использование:

WHERE column REGEXP 'W[[:alnum:]]+rld!' 

В качестве альтернативы, вы можете использовать:

WHERE column RLIKE 'W[[:alnum:]]+rld!' 
  • RLIKE является синонимом REGEXP
  • [[:alnum:]] позволит любой алфавитно-цифровой символ, [[:alnum:]]+ позволит кратные
  • REGEXP \ RLIKE не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.

Ссылка: MySQL Regex Support

+0

Отредактировано для добавления, что REGEXP не чувствителен к регистру ... –

+0

+1 Отличный ответ –

+0

Спасибо, Пони! Похоже, есть чему поучиться. – Nirmal

Смежные вопросы