[英]How do I match an entire string with a regex?
我需要一个正则表达式,它只会在整个字符串与我的查询匹配的地方找到匹配项。
例如,如果我搜索名称为“红色十月”的电影,我只想匹配该确切标题(不区分大小写),但不匹配“寻找红色十月”之类的标题。 不太确定我知道该怎么做。 有人知道吗?
谢谢!
试试下面的正则表达式:
^Red October$
默认情况下,正则表达式区分大小写。 ^
标记匹配文本的开始, $
标记结束。
通常,使用默认设置, ^
和$
锚是确保正则表达式匹配整个字符串的好方法。
不过有几点需要注意:
如果您的正则表达式中有更改,请务必将您的正则表达式包含在一个非捕获组中,然后再用^
和$
包围它:
^foo|bar$
当然不同于
^(?:foo|bar)$
此外,如果设置了某些选项, ^
和$
可以具有不同的含义(行的开始/结束而不是字符串的开始/结束)。 在支持正则表达式的文本编辑器中,这通常是默认行为。 在某些语言中,尤其是 Ruby,这种行为甚至无法关闭。
因此,还有另一组锚点保证只在整个字符串的开始/结束处匹配:
\A
匹配字符串的开头。
\Z
匹配字符串末尾或最后一个换行符之前。
\z
匹配字符串的末尾。
但并非所有语言都支持这些锚点,尤其是 JavaScript。
使用^
和$
修饰符来表示正则表达式模式相对于字符串的开头和结尾的位置:
Regex.Match("Red October", "^Red October$"); // pass
Regex.Match("The Hunt for Red October", "^Red October$"); // fail
我知道回答这个问题可能有点晚了,但也许对其他人来说会派上用场。
最简单的方法:
var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
//pass
} else {
//fail
}
您需要将您的正则表达式括在^
(字符串开头)和$
(字符串结尾)中:
^Red October$
如果字符串可能包含正则表达式元符号( .
{
}
(
)
$
等),我建议使用
^\QYourString\E$
\Q
开始引用所有字符,直到\E
。 否则,正则表达式可能不合适甚至无效。 如果语言使用正则表达式作为字符串参数(如我在示例中看到的),则应使用双斜杠:
^\\QYourString\\E$
希望这个提示可以帮助某人。
如前面的答案中所述,可以使用^
和$
匹配整个字符串。
要使正则表达式不区分大小写,您可以实施涉及字符类的黑客。 很多角色类。
^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$
对不起,但这有点不清楚。
从我读到的,你想做简单的字符串比较。 你不需要正则表达式。
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] $
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.