2012-06-20 177 views
0

如何匹配mysql中的整個單詞?MySQL REGEXP僅匹配整個單詞

舉例來說,如果我在「」型,我想匹配「勞拉」或「勞倫斯」。

下面是匹配 '' 與 '勞拉'

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">內。

+0

看來你需要大量的工作,和很多過濾這裏。祝你好運。我建議你一步一步地進行過濾。這可能需要子查詢和/或多個查詢。 –

+0

另請參閱SO的相關部分,右側欄中。很多用戶之前都遇到同樣的問題。 - > –

回答

2

這是行不通的?

REGEXP '[^ <] *鎏[[:>:]]'

按照documentation,[[:>:]]將在單詞的末尾匹配字邊界

+0

謝謝你的回答,安德魯。 – laukok

+0

你完全歡迎。 – andrewsi

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

感謝您的答案,但它返回一些奇怪的結果,但。儘管如此,只有這樣的工作才能確定''[^ <]*lau[[:>:]]''。 – laukok

2

andrewsi代碼沒有爲我工作,但這個REGEXP解決了我的問題。

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