2015-05-17 3 views
0

Я пытаюсь получить из базы данных все, что содержит заключенные квадратные скобки. Моя попытка была следующая:MySql REGEXP ищет что-либо с открывающимися и закрывающимися квадратными скобками

select count(*) 
from table t 
where t.string regexp '@\\[@\\]@' 
group by t.TID 

Примеры строк я пытаюсь получить:

foo[foo]foo 
foo[foo] 
[foo]foo 
[foo] 
[] 
+0

Как насчет 'foo [bar' и'] ['и']]]]]] '? –

+0

И '[вложенные [скобки] и т. Д.]'? –

ответ

2

Это, вероятно, самый быстрый:

LIKE '%[%]%' -- finds all of your test items plus some more. 

Если вам нужны скобки, чтобы быть «сбалансированным», то есть более жесткая проблема, особенно, если они могут быть «вложенными».

REGEXP более выразителен, чем, но медленнее, чем, LIKE. Нет очевидной необходимости в REGEXP.

Обратные косые черты понадобятся в REGEXP, а не в LIKE.

+0

Спасибо, я, к счастью, не имею дело с вложением скобок, не уверен, возможно ли это с LIKE или REGEXP. – Clutchy

1

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

where t.string LIKE '%[%' OR t.string LIKE '%]%' 

В этом случае вам просто не нужен REGEXP основанный поиск.

+0

Большое спасибо, кстати, почему некоторые люди пишут в некоторых других вопросах, которые вам нужно поставить \\ перед квадратными скобками? – Clutchy

+1

* Поскольку MySQL использует синтаксис C escape в строках (например, «\ n» для представления символа новой строки), вы должны удвоить любой «\», который вы используете в своих строках REGEXP * (из [документации MySQL REGEXP] (https : //dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp)). Я предлагаю использовать ** LIKE **, и он не требует экранирования квадратных скобок, потому что он не может рассматриваться как обычный специальный символ экстренности. –

+0

Обратите внимание, что этот ответ будет соответствовать 'неуравновешенному [bracket' и т. Д. –

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