如何将整个字符串与正则表达式匹配?

问题描述:

我需要一个正则表达式,它只会查找整个字符串与我的查询匹配的匹配项。如何将整个字符串与正则表达式匹配?

举例来说,如果我做了一个名为“红十月”的电影搜索我只是想匹配,准确的标题(不区分大小写),但不能匹配,如“猎杀红色十月”称号。不太确定我知道如何做到这一点。有人知道吗?

谢谢!

+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

试试下面的正则表达式:

^Red October$ 

默认,正则表达式区分大小写。 ^标志着匹配文本的开始和$的结束。

对不起,但这有点不清楚。

从我读,你想要做简单的字符串进行比较。你不需要这样的正则表达式。

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

您需要附上您的正则表达式中^(字符串的开始)和$(字符串的结尾):

^Red October$ 

使用^$修饰符来表示,其中正则表达式位于相对于字符串的开头和结尾:

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

一般情况下,并使用默认设置,^$锚的好方法确保正则表达式匹配整个字符串。

几个注意事项,但:

如果你在你的正则表达式交替,以^$周边之前一定要附上你的正则表达式在非捕获组:

^foo|bar$ 

是当然不同于

^(?:foo|bar)$ 

此外,^$罐采取不同的含义(开始线而不是开始/ 的端部/端)如果某些选项被设置。在支持正则表达式的文本编辑器中,这通常是默认行为。在某些语言中,尤其是Ruby,这种行为甚至无法关闭。

因此,存在另一组在整个字符串的开始/结束保证只有匹配锚:

\A在字符串的开始匹配。在字符串的末尾或最终换行符之前

\Z匹配。

\z在字符串的最后比赛。

但并非所有的语言都支持这些定位符,最值得注意的是JavaScript。

+2

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

我知道这可能有点晚,以回答这个问题,但也许它会派上用场。

最简单的方法:

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

匹配整个字符串可以^完成,并且在$以前的答案是说。

为了使正则表达式不区分大小写,可以实现涉及字符类的hack。 A 批号的字符类。

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

你可以像本例,如果我只是想赶上一次在字符串中的字母减去一个,它可以与myRegex.IsMatch()来检查

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