MySQL REGEXP只匹配整个单词

时间:2012-06-20 18:02:25

标签: php mysql sql regex substring

如何匹配mysql中的整个单词?

例如,如果我输入' lau ',我想要匹配' laura '或'劳伦斯”。

以下是我的工作查询,将“ 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">等标签内的单词。

3 个答案:

答案 0 :(得分:3)

让我们分解你目前的正则表达式:

>[^<]*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[[:>:]]

答案 1 :(得分:2)

这有用吗?

REGEXP'[^&lt;] * lau [[:&gt;:]]'

根据documentation,[[:&gt;:]]会匹配单词末尾的单词边界

答案 2 :(得分:2)

andrewsi代码对我不起作用,但是这个REGEXP解决了我的问题。

m_city REGEXP'[[:&lt;:]] YOUR_CITY [[:&gt;:]]'