2012-02-08 4 views
1

Я ссылаюсь на один открытый код. Там я могу найти sql с таким фильтром.__ * в регулярном выражении Mysql

select sometext from table1,table2 where table1.sometext LIKE 
CONCAT('% ',table2.test_keyword,' %') AND table2.test_keyword NOT 
REGEXP '__*'; 

Что это __ * в этом sql?

+1

Проконсультировался ли вы с вашей обычной книгой? –

ответ

5

__* соответствует одному _, за которым следует ноль или более _ s.

__* 
^^^ 
||\__ (zero or more) ^
|\___ underscore   | 
\____ underscore, then | 

_+ сделали бы ту же самую работу.

_+ 
^^ 
|\__ (one or more)  ^
\___ underscore   | 
+0

Один '_', за которым следует ** ноль ** или больше' _'. – kennytm

+1

@KennyTM: Вот что я написал! ;) –

1

Это просто один или несколько символов подчеркивания.

Узор лучше всего читается как:

  • '_', ровно один символ подчеркивания,
  • '_*', а затем ноль или более символов подчеркивания.

Имейте в виду, что без стартового маркера, который будет соответствовать шаблону на любой месте в строке, так что это в основном означает любую строку с подчеркиванием в нем (или, более точно, так как вы» с использованием NOT, строка без символ подчеркивания).

Это также излишне сложно, так как вы можете добиться такого же эффекта с помощью AND table2.test_keyword NOT REGEXP '_'.

См. here для последней документации MySQL по регулярным выражениям (5.6 на момент ответа).