0

のような文字列に一致する正規表現をC#で作成しようとしています"�"が、Regexは最初の一致で停止し、文字列全体に一致させたいと思います。

私はこれを行うために多くの方法を試してきましたが、現在、私のコードは次のようになっています。

string sPattern = @"/&#\d{2};/";
Regex rExp = new Regex(sPattern);
MatchCollection mcMatches = rExp.Matches(txtInput.Text);
foreach (Match m in mcMatches) {
    if (!m.Success) {
        //Give Warning
    }
}

また、試しlblDebug.Text = Regex.IsMatch(txtInput.Text, "(&#[0-9]{2};)+").ToString();てみましたが、最初の一致のみが見つかりました。

任意のヒント?

編集:

私が探している最終結果は�&#、最初の一致のみが行われるため、私のコードはこれを正しい文字列としてマークするため、現在のように、のような文字列は正しくないものとしてラベル付けされることです。

2番目の編集:

コードをこれに変更しました

string sPattern = @"&#\d{2};";
Regex rExp = new Regex(sPattern);

MatchCollection mcMatches = rExp.Matches(txtInput.Text);
int iMatchCount = 0;
foreach (Match m in mcMatches) {
    if (m.Success) {
        iMatchCount++;
    }
}

int iTotalStrings = txtInput.Text.Length / 5;
int iVerify = txtInput.Text.Length % 5;

if (iTotalStrings == iMatchCount && iVerify == 0) {
    lblDebug.Text = "True";
} else {
    lblDebug.Text = "False";
}

そして、これは私が期待したように機能しますが、それでもこれはより良い方法で達成できると思います。

3番目の編集:@devundefが示唆しているように、式"^(&#\d{2};)+$"は私がホッピングしていた作業を実行するので、これを使用すると、最終的なコードは次のようになります。

string sPattern = @"^(&#\d{2};)+$";
Regex rExp = new Regex(sPattern);
lblDebug.Text = rExp.IsMatch(txtInput.Text).ToString();

私は常に文字列文字(^ / $)の開始と終了を無視します。

4

3 に答える 3

3

/式の最初と最後にあるを削除します。

string sPattern = @"&#\d{2};";

編集

パターンをテストしたところ、期待どおりに機能しました。何が欲しいかわからない。

2つのオプション:

&#\d{2};=>文字列にN個の一致があります。文字列�では、2つのグループに一致し �

(&#\d{2};)+=>文字列全体を1つのグループとしてまとめます。文字列�では、1つのグループに一致します。�

編集2:

必要なのは、グループを取得することではなく、文字列が正しい形式であるかどうかを知ることです。これはパターンです:

Regex rExp = new Regex(@"^(&#\d{2};)+$");

var isValid = rExp.IsMatch("�") // isValid = true
var isValid = rExp.IsMatch("�xyz") // isValid = false
于 2012-08-09T19:26:29.400 に答える
1

ここに行きます:(&#\d{2};)+これは1回以上の発生で機能するはずです

于 2012-08-09T19:30:09.270 に答える
0

(&#\ d {2};)*

推奨: http ://www.weitz.de/regex-coach/

于 2012-08-09T19:26:49.650 に答える