2016-12-15 2 views
1

У меня есть это выражение Regex я использую, чтобы найти слово в тексте с помощью запроса SQLрегулярные выражения Parenthese в захвате группы

[SQL QUERY] where REGEX concat(^|’| | | |\'|>|-)','Mercure','(| | |.|,|<|-) = 1 

Это работает так, как я хочу (по некоторым причинам, традиционные границы слов не сделать работу). Я хотел бы добавить к каждой группе захвата соответственно открывающую скобку и закрытие. Но когда я пытаюсь:

(^|’| | | |\'|>|-|\()','Mercure','(| | |.|,|<|-|\)) 

Тогда я получаю сообщение об ошибке с моей PHP скрипт, хотя regex101, кажется, не найти это странным. Кто-нибудь есть идея, как это решить?

+0

Пожалуйста, вставьте свой PHP-код. –

+1

Возможно, вы хотите 'REGEX concat ('[[: <:]]', 'Mercure', '[[:>:]]')', если вам нужно сопоставить целые слова с MySQL? –

+0

Большое спасибо Wiktor: но эти границы слов имеют дело с такими случаями, как апостроф? как в французском «j'aime», aime следует рассматривать как целое слово. Я думаю, именно поэтому я решил справиться с этим именно тогда. Я хотел бы ошибаться, хотя: это лучше ... – DonRamiro

ответ

1
WHERE col REGEXP "(^|[’ '>-])Mercure[ .,<-]" 

Я не понимаю, есть несколько пробелов.

Нелегко найти >, соответствующий только < - это, вероятно, займет длинный список вариантов.

Один из способов подойти к решению проблемы (если он сложен) должны сделать это только в MySQL:

WHERE col LIKE '%Mercure%' 

затем использовать PHP код, чтобы отфильтровать строки, которые не соответствуют сложным граничным условиям.

+0

Спасибо за отличный совет! – DonRamiro

+0

Упс - Есть недостаток. 'REGEXP' работает только с байтами, а не с несколькими байтовыми символами, такими как' ''. Регулярное выражение не будет «терпеть неудачу», но в некоторых ситуациях это может сыграть смешно. –

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