我需要一个正则表达式,只能找到整个字符串与我的查询完全匹配的结果。
例如,如果我搜索名为“Red October”的电影,我只想匹配该精确标题(不区分大小写),而不是像“寻找红色十月”的标题。不太确定如何做到这一点。有人知道吗?
谢谢!
尝试使用以下正则表达式:
^Red October$
默认情况下,正则表达式是区分大小写的。符号^
表示文本匹配的开头,而$
表示结尾。
^
和 $
锚点是确保正则表达式匹配整个字符串的好方法。^
和 $
包围之前将其包含在非捕获组中:^foo|bar$
当然与之不同
^(?:foo|bar)$
此外,如果设置了某些选项,^
和 $
可以具有不同的含义(表示行的开头/结尾而不是字符串的开头/结尾)。在支持正则表达式的文本编辑器中,这通常是默认行为。在一些语言中,特别是 Ruby,甚至无法关闭此行为。
因此,还有另一组锚点,可以保证仅匹配整个字符串的开头/结尾:
\A
匹配字符串的开头。
\Z
匹配字符串的结尾或最后一个换行符之前。
\z
匹配字符串的最后。
但并非所有语言都支持这些锚点,尤其是 JavaScript。
?:
表示括号不计入捕获组(因此它们不会影响现有正则表达式中的任何现有组编号)。如果你使用的REGEX不支持这个,你可以使用look-behind和look-ahead(也是非捕获):(?<=^)foo|bar(?=$)
。 - Matt Arnold我知道回答可能有点晚,但对于其他人可能会有用。
最简单的方法:
var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
//pass
} else {
//fail
}
使用 ^
和 $
修饰符表示正则表达式模式相对于字符串的开头和结尾的位置:
Regex.Match("Red October", "^Red October$"); // pass
Regex.Match("The Hunt for Red October", "^Red October$"); // fail
^
(表示字符串的开头)和$
(表示字符串的结尾):^Red October$
如果字符串可能包含正则表达式元字符(.
{
}
(
)
$
等),建议使用
^\QYourString\E$
\Q
从此处开始引用所有字符,直到遇到\E
。否则,正则表达式可能不适当甚至无效。如果语言将正则表达式作为字符串参数使用(如示例中所示),应使用双斜杠:
^\\QYourString\\E$
抱歉,但这有点不清楚。
从我所读的来看,您想要进行简单的字符串比较。您不需要使用正则表达式。
string myTest = "Red October";
bool isMatch = (myTest.ToLower() == "Red October".ToLower());
Console.WriteLine(isMatch);
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
你可以像这样做,例如,如果我只想在字符串中捕获一次字母“a”,并且可以使用myRegex.IsMatch()进行检查
^[^e][e]{1}[^e]$
string.Contains
却可以胜任呢? - Odedstring1.Equals(string2, StringComparison.OrdinalIgnoreCase);
。 - ToolmakerSteve