MySQL REGEXP только для соответствия целому слову

Как я могу сопоставить все слово в mysql?

Например, если я ввожу "lau", я не хочу совпадать с "laura" или "laurance '.

Ниже мой рабочий запрос, который соответствует "lau" с "laura".

SELECT *
FROM
(
    SELECT

        p.page_id,
        p.page_url AS url,
        p.page_title AS title,
        SUBSTRING_INDEX(p.page_content_1, ' ', 500) AS content,
        EXTRACT(DAY FROM p.page_backdate) AS date,
        EXTRACT(MONTH FROM p.page_backdate) AS month,
        EXTRACT(YEAR FROM p.page_backdate) AS year

    FROM root_pages AS p

    WHERE p.page_hide != '1'
    AND p.page_url != 'cms'
    AND p.page_url != 'search'

    ORDER BY p.page_created DESC
) x
WHERE x.content REGEXP  '>[^<]*lau'

Есть идеи исправить мой REGEXP?

Я использую REGEXP '>[^<]*searchtext' потому, что в моем содержимом есть теги HTML, например,

<p class="heading-sitemap">About us</p>
<ul>
<li class="subheading-sitemap">The team</li>
<li><a href="#">Introduction to gt</a></li>
<li><a href="#">Simon x</a></li>
<li><a href="#">Cathrin xe</a></li>
<li><a href="#">Patrick x</a></li>
<li><a href="#">Laurence x</a></li>
<li><a href="#">Tessa x</a></li>>
</ul>

Я не хочу искать, слово может попасть внутрь тегов, например <a href="http://laura.com">.


person laukok    schedule 20.06.2012    source источник
comment
Кажется, вам потребуется много работы и много фильтрации. удачи. Предлагаю вам делать фильтрацию поэтапно. Для этого могут потребоваться подзапросы и / или несколько запросов.   -  person Dexter Huinda    schedule 20.06.2012
comment
См. Также раздел «Связанное» SO на правой боковой панели. Раньше у многих пользователей были подобные проблемы. - ›   -  person Dexter Huinda    schedule 20.06.2012


Ответы (3)


Это работает?

REGEXP '[^ ‹] * lau [[:>:]]'

Согласно документации, [[:>:]] будет сопоставить границу слова в конце слова

person andrewsi    schedule 20.06.2012

Давайте разберем ваше текущее регулярное выражение:

>[^<]*lau

>      match the character '>'
[^<]*  match 0 or more non-'<' characters
lau    match 'lau'

Таким образом, это будет соответствовать следующему:

>bbblau
>bbb<lau
>lau
><lau

Я предполагаю, что вы хотите соответствовать следующему:

>lau

Но нет:

>laubbb
><lau
>bbb<lau

В этом случае будет работать следующее регулярное выражение:

>lau( |<|$)

Изменить: использование метода, показанного andrewsi, может быть чище:

>lau[[:>:]]
person Rusty Fausak    schedule 20.06.2012
comment
спасибо за ответ, но он возвращает какой-то странный результат. только это работает нормально '>[^<]*lau[[:>:]]' хотя. - person laukok; 20.06.2012

Код andrewsi у меня не работал, но этот REGEXP решил мою проблему.

m_city REGEXP '[[: ‹:]] ВАШ_ГОРОД [[:>:]]'

person Sajitha Rathnayake    schedule 04.10.2013