web-dev-qa-db-ja.com

文字列全体を正規表現と一致させるにはどうすればよいですか?

文字列全体がクエリに一致する一致のみを検索する正規表現が必要です。

たとえば、「Red October」という名前の映画を検索する場合、「The October Hunt For Red」などのタイトルとは一致せず、その正確なタイトル(大文字と小文字を区別しない)のみを一致させます。私はこれを行う方法を知っているかどうかはわかりません。知ってる?

ありがとう!

66
Micah

次の正規表現を試してください。

^Red October$

デフォルトでは、正規表現では大文字と小文字が区別されます。 ^は一致するテキストの開始をマークし、$ 終わり。

89

一般に、デフォルト設定では、^および$アンカーは、正規表現が文字列全体と一致することを保証するための良い方法です。

ただし、いくつかの注意事項があります。

正規表現に変更がある場合は、^$で囲む前に、キャプチャしていないグループで正規表現を囲むようにしてください。

^foo|bar$

もちろん異なる

^(?:foo|bar)$

また、特定のオプションの場合、^$は異なる意味(stringの開始/終了の代わりにlineの開始/終了)を取ることができます。設定されています。正規表現をサポートするテキストエディターでは、通常これがデフォルトの動作です。一部の言語、特にRubyでは、この動作をオフにすることさえできません。

したがって、文字列全体の開始/終了でのみ一致することが保証される別のアンカーセットがあります。

\Aは、文字列の先頭で一致します。

\Zは、文字列の最後または最後の改行の前で一致します。

\zは、文字列の最後に一致します。

しかし、すべての言語がこれらのアンカーをサポートしているわけではありません。最も顕著なのはJavaScriptです。

30
Tim Pietzcker

使用 ^および$修飾子は、正規表現パターンが文字列の開始および終了に対してどこにあるかを示します。

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

正規表現を^(文字列の先頭)および$(文字列の末尾)で囲む必要があります。

^Red October$
8
Anton Gogolev

これに答えるのに少し遅れる可能性があることは知っていますが、他の誰かにとっては便利かもしれません。

最も簡単な方法:

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

申し訳ありませんが、それは少し不明瞭です。

私が読んだものから、あなたは単純な文字列比較を行いたいです。そのために正規表現は必要ありません。

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

前の回答で述べたように、^$を使用して文字列全体を一致させることができます。

正規表現の大文字と小文字を区別しないようにするには、文字クラスを含むハックを実装できます。 ロット文字クラス。

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