如何将整个字符串与正则表达式匹配?
我需要一个正则表达式,它只会查找整个字符串与我的查询匹配的匹配项。
例如,如果我搜索名称为“红色十月”的电影,我只想匹配确切的标题(不区分大小写),但不匹配“红色十月寻宝”这样的标题。 不太确定我知道如何做到这一点。 有人知道吗?
谢谢!
尝试下面的正则表达式:
^Red October$
默认情况下,正则表达式区分大小写。 ^
标记匹配文本的开始和$
结束。
一般来说,使用默认设置, ^
和$
anchor是确保正则表达式匹配整个字符串的好方法。
但有几点需要注意:
如果在正则表达式中有交替,请确保将正则表达式包含在非捕获组中,然后使用^
和$
:
^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
你需要把你的正则表达式放在^
(字符串的开头)和$
(字符串的结尾):
^Red October$
我知道这可能有点迟了,但也许这会对其他人来说很方便。
最简单的方法:
var someString = "..."; var someRegex = "..."; var match = Regex.Match(someString , someRegex ); if(match.Success && match.Value.Length == someString.Length){ //pass } else { //fail }
对不起,但有点不清楚。
从我读的,你想做简单的字符串比较。 你不需要这样的正则表达式。
string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Console.WriteLine(isMatch); isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
匹配整个字符串可以用^
和$
来完成,如前面的答案中所述。
为了使正则表达式不区分大小写,可以实现一个涉及字符类的hack。 很多角色类。
^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$
你可以这样做例如,如果我只想捕捉一次字母减去一个字符串,它可以检查与myRegex.IsMatch()
^ [^ e] [e] {1} [^ e] $