ワイルドカードは Regex パターン(greedy) または(not-greedy)*
と同等であるため、以下を実行する必要があります。".*"
".*?"
string.Replace()
string pattern = Regex.Escape(inputPattern).Replace("\\*", ".*?");
Regex.Escape(inputPattern)
冒頭に注意。正規表現で使用される特殊文字が含まれている可能性があるためinputPattern
、それらの文字を適切にエスケープする必要があります。そうしないと、パターンが爆発します。
Regex.IsMatch(input, ".NET"); // may match ".NET", "aNET", "FNET", "7NET" and many more
その結果、ワイルドカード*
は にエスケープされ\\*
ます。これが、ワイルドカード自体だけでなく、エスケープされたワイルドカードを置き換える理由です。
パターンを使用するには
次のいずれかを実行できます。
Regex.IsMatch(input, pattern);
また
var regex = new Regex(pattern);
regex.IsMatch(input);
貪欲と貪欲でないの違い
違いは、パターンがどれだけ一致しようとするかです。
次の文字列を考えてみましょう: "hello (x+1)(x-1) world"
. (
開き括弧と閉じ括弧、およびその間のものを一致させる必要があり)
ます。
Greedy は一致するだけ"(x+1)(x-1)"
で、他には何も一致しません。基本的に、検索できる最長の部分文字列に一致します。
Not-Greedy は一致"(x+1)"
し、他には"(x-1)"
何もありません。言い換えれば、可能な限り短い部分文字列です。