2010-11-08 91 views
48

我需要一個正則表達式,它只會查找整個字符串與我的查詢匹配的匹配項。如何將整個字符串與正則表達式匹配?

舉例來說,如果我做了一個名爲「紅十月」的電影搜索我只是想匹配,準確的標題(不區分大小寫),但不能匹配,如「獵殺紅色十月」稱號。不太確定我知道如何做到這一點。有人知道嗎?

謝謝!

+1

爲什麼你需要一個簡單的'string.Contains'工作的東西的正則表達式? – Oded 2010-11-08 11:50:39

+0

我需要使用正則表達式的原因是我使用它在MongoDB中進行搜索,我需要它是不區分大小寫的,只能用正則表達式執行 – Micah 2010-11-08 12:01:16

+0

爲什麼不將數據轉換(on-fly)到小寫字母和小寫字符串用於搜索? – greenoldman 2010-11-08 12:21:28

回答

73

試試下面的正則表達式:

^Red October$ 

默認,正則表達式區分大小寫。 ^標誌着匹配文本的開始和$的結束。

1

對不起,但這有點不清楚。

從我讀,你想要做簡單的字符串進行比較。你不需要這樣的正則表達式。

string myTest = "Red October"; 
bool isMatch = (myTest.ToLower() == "Red October".ToLower()); 
Console.WriteLine(isMatch); 
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower()); 
+0

我需要使用正則表達式的原因是我使用它在MongoDB中進行搜索,我需要它是不區分大小寫的,只能用正則表達式來完成。 – Micah 2010-11-08 11:52:18

8

您需要附上您的正則表達式中^(字符串的開始)和$(字符串的結尾):

^Red October$ 
14

使用^$修飾符來表示,其中正則表達式位於相對於字符串的開頭和結尾:

Regex.Match("Red October", "^Red October$"); // pass 
Regex.Match("The Hunt for Red October", "^Red October$"); // fail 
23

一般情況下,並使用默認設置,^$錨的好方法確保正則表達式匹配整個字符串。

幾個注意事項,但:

如果你在你的正則表達式交替,以^$周邊之前一定要附上你的正則表達式在非捕獲組:

^foo|bar$ 

是當然不同於

^(?:foo|bar)$ 

此外,^$罐採取不同的含義(開始而不是開始/ 的端部/端)如果某些選項被設置。在支持正則表達式的文本編輯器中,這通常是默認行爲。在某些語言中,尤其是Ruby,這種行爲甚至無法關閉。

因此,存在另一組在整個字符串的開始/結束保證只有匹配錨:

\A在字符串的開始匹配。在字符串的末尾或最終換行符之前

\Z匹配。

\z在字符串的最後比賽。

但並非所有的語言都支持這些定位符,最值得注意的是JavaScript。

+2

這是最有用的答案 – 2015-01-23 14:18:59

2

我知道這可能有點晚,以回答這個問題,但也許它會派上用場。

最簡單的方法:

var someString = "..."; 
var someRegex = "..."; 
var match = Regex.Match(someString , someRegex); 
if(match.Success && match.Value.Length == someString.Length){ 
    //pass 
} else { 
    //fail 
} 
0

匹配整個字符串可以^完成,並且在$以前的答案是說。

爲了使正則表達式不區分大小寫,可以實現涉及字符類的hack。 A 批號的字符類。

^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$ 
-1

你可以像本例,如果我只是想趕上一次在字符串中的字母減去一個,它可以與myRegex.IsMatch()來檢查

^[^ E] [e] {1} [^ e] $