2012-03-20 61 views
2

假設我正在搜索整個單詞「cat」,但不是「catastrophy」或「copycat」。我可以做到這一點的表達用整個單詞和可選的第一個字符的正則表達式

/\bcat\b/\i 

如果(我在尋找通過微博,順便說一下)我想也可能找到「#cat」或「@cat」?

什麼是最乾淨的正則表達式來完成這個?

+0

黑客試圖與/ \ [#@]貓\ B/I ...我是一個正則表達式新手 – jbnunn 2012-03-20 16:55:02

+0

發生了什麼事,當你試過了正則表達式? – 2012-03-20 16:55:37

+0

@jnunn:您需要在*([@#])?之後放置'\ b' *,否則只有在緊跟在單詞字符前面時,纔會包含'@'或'#'。 – ruakh 2012-03-20 16:57:50

回答

3

你可以寫任一:

/(?:\b|[#@])cat\b/i 

/[#@]?\bcat\b/i 

這要麼cat匹配的整個單詞,否則#@cat作爲一個整體詞。 (他們是相同的;你可以使用任何一個你認爲更清晰的人。)

(注意:你沒有提及你使用的是哪一個正則表達式引擎,所以以上是根據你所做的信息提供)

+0

感謝@ruakh,我在Ruby。 – jbnunn 2012-03-20 16:59:19

+0

我想我可能更喜歡你的兩個解決方案中的第二個;理解起來似乎比較簡單,但它確實需要人們正確地理解'\ b',這很多也許大部分都不是。 – tchrist 2012-03-20 17:08:08

1

另一種猜測/^[@#]?\bcat\b

echo "#cat" | perl -ne 'print if /^[@#]?\bcat\b/i' 
#cat 

echo "@cat" | perl -ne 'print if /^[@#]?\bcat\b/i' 
@cat 

但不是:

echo "~cat" | perl -ne 'print if /^[@#]?\bcat\b/i' 

(注^作爲區別其他帖子。)

問候

相關問題