__ * в регулярном выражении Mysql - PullRequest
1 голос
/ 08 февраля 2012

Я ссылаюсь на один открытый исходный код. Там я могу найти SQL с этим видом фильтра.

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

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

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

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

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

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

_+
^^
|\__ (one or more)       ^
\___ underscore          |
1 голос
/ 08 февраля 2012

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

Шаблон лучше всего читать как:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...