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="/bg#">Introduction to gt</a></li>
<li><a href="/bg#">Simon x</a></li>
<li><a href="/bg#">Cathrin xe</a></li>
<li><a href="/bg#">Patrick x</a></li>
<li><a href="/bg#">Laurence x</a></li>
<li><a href="/bg#">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

Защо ставам празен, когато изпълня това? Ако приемем, че точката на потребителя е 2500. Трябва да върне 83

posts_controller

@user = User.find(params[:id])
@user.percentage = count_percentage(@user)
@user.save

контролер_на_приложение

def count_percentage(user)
    if user

        if user.point > 2999
            percentage = ((user.point / 5000.0) * 100 ).to_i
        elsif user.point > 1999
            percentage = ((user.point / 3000.0) * 100 ).to_i
        end

        return percentage

    end
end
- person laukok; 20.06.2012

andrewsi кодът не работи за мен, но този REGEXP реши проблема ми.

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

person Sajitha Rathnayake    schedule 04.10.2013