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

我需要一个只在整个字符串与查询匹配的地方找到匹配项的正则表达式。

例如,如果我搜索名为“红色十月”的电影,我只想匹配那个确切的标题(不区分大小写) ,但不匹配像“追击赤色十月”这样的标题。我不知道该怎么做。有人知道吗?

谢谢!

90301 次浏览

Sorry, but that's a little unclear.

From what i read, you want to do simple string compare. You don't need regex for that.

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

You need to enclose your regex in ^ (start of string) and $ (end of string):

^Red October$

Try the following regular expression:

^Red October$

By default, regular expressions are case sensitive. The ^ marks the start of the matching text and $ the end.

Use the ^ and $ modifiers to denote where the regex pattern sits relative to the start and end of the string:

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

Generally, and with default settings, ^ and $ anchors are a good way of ensuring that a regex matches an entire string.

A few caveats, though:

If you have alternation in your regex, be sure to enclose your regex in a non-capturing group before surrounding it with ^ and $:

^foo|bar$

is of course different from

^(?:foo|bar)$

Also, ^ and $ can take on a different meaning (start/end of line instead of start/end of string) if certain options are set. In text editors that support regular expressions, this is usually the default behaviour. In some languages, especially Ruby, this behaviour cannot even be switched off.

Therefore there is another set of anchors that are guaranteed to only match at the start/end of the entire string:

\A matches at the start of the string.

\Z matches at the end of the string or before a final line break.

\z matches at the very end of the string.

But not all languages support these anchors, most notably JavaScript.

I know that this may be a little late to answer this, but maybe it will come handy for someone else.

Simplest way:

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

You can do it like this Exemple if i only want to catch one time the letter minus a in a string and it can be check with myRegex.IsMatch()

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

If the string may contain regex metasymbols (. { } ( ) $ etc), I propose to use

^\QYourString\E$

\Q starts quoting all the characters until \E. Otherwise the regex can be unappropriate or even invalid. If the language uses regex as string parameter (as I see in the example), double slash should be used:

^\\QYourString\\E$

Hope this tip helps somebody.