1. ホーム
  2. c#

[解決済み] ワイルドカードを使用した文字列のマッチング

2023-05-09 21:20:04

質問

ワイルドカード(*)を使った文字列のマッチングを行いたいのですが、ワイルドカードは "any"を意味します。例えば

*X = string must end with X
X* = string must start with X
*X* = string must contain X

などの複合的な使い方もある。

*X*YZ* = string contains X and contains YZ
X*YZ*P = string starts with X, contains YZ and ends with P.

これを行うための簡単なアルゴリズムはありますか? 正規表現を使うのは不安です(可能性はありますが)。

はっきり言って、ユーザーは上記の内容をフィルターボックスに入力する(できるだけシンプルなフィルター)ので、自分で正規表現を書く必要はないと思っています。 だから、私が上記の記法から簡単に変換できるものが良いだろう。

どのように解決するのですか?

VB.NETの ライクオペレータ :

string text = "x is not the same as X and yz not the same as YZ";
bool contains = LikeOperator.LikeString(text,"*X*YZ*", Microsoft.VisualBasic.CompareMethod.Binary);  

使用方法 CompareMethod.Text を使ってください。

を追加する必要があります。 using Microsoft.VisualBasic.CompilerServices; への参照を追加します。 Microsoft.VisualBasic.dll .

.NETフレームワークの一部であり、これからもずっとそうなので、このクラスを使っても問題はないでしょう。