【问题标题】:MySQL REGEXP to match the whole word onlyMySQL REGEXP 仅匹配整个单词
【发布时间】:2012-06-22 22:31:14
【问题描述】:

如何在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 '&gt;[^&lt;]*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>

我不想搜索这个词可能落在&lt;a href="http://laura.com"&gt;等标签内。

【问题讨论】:

  • 看来您需要做很多工作,并且在这里进行大量过滤。祝你好运。我建议您逐步进行过滤。这可能需要子查询和/或多个查询。
  • 另见 SO 的相关部分,在右侧栏中。很多用户之前都遇到过同样的问题。 -->

标签: php mysql sql regex substring


【解决方案1】:

这行得通吗?

正则表达式'[^:]]'

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回答,但它返回了一些奇怪的结果。不过只有这项工作可以'&gt;[^&lt;]*lau[[:&gt;:]]'。
    【解决方案3】:

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

    m_city REGEXP '[[:<:>:]]'

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2011-12-21
      • 2012-03-29
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      相关资源
      最近更新 更多