0

如何匹配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">.

4

3 回答 3

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[[:>:]]
于 2012-06-20T18:11:38.280 回答
2

这行得通吗?

正则表达式'[^<]*lau[[:>:]]'

根据文档, [[:>:]] 将匹配单词末尾的单词边界

于 2012-06-20T18:11:20.137 回答
2

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

m_city正则表达式'[[:<:]]YOUR_CITY[[:>:]]'

于 2013-10-04T03:23:23.077 回答