C#正则表达式匹配所有出现次数

时间:2012-08-09 19:21:37

标签: c# regex match

我正在尝试在C#中创建一个与"�"等字符串匹配的正则表达式,但我的正则表达式在第一个匹配时停止,我想匹配整个字符串。

我一直在尝试很多方法来做到这一点,目前,我的代码看起来像这样:

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();,但它也只找到第一场比赛。

任何提示?

编辑:

我正在寻找的最终结果是像�&#这样的字符串被标记为不正确,因为现在只有第一次匹配,我的代码将其标记为正确的字符串。

第二次编辑:

我将代码更改为

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";
}

这就像我期望的那样,但我仍然认为这可以通过更好的方式实现。

第三编辑: 正如@devundef建议的那样,表达式"^(&#\d{2};)+$"完成了我正在跳的工作,所以有了这个,我的最终代码看起来像这样:

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

我总是忽略字符串字符的开头和结尾(^ / $)。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

删除表达式开头和结尾的/

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

修改

我测试了模式,它按预期工作。不确定你想要什么。

两个选项:

&#\d{2}; =>将在字符串中给出N个匹配项。在字符串�上,它将匹配2个组,�

(&#\d{2};)+ =>将整个字符串作为一个单独的组。在字符串�上,它将匹配1个组�

编辑2:

你想要的不是获取组,而是知道字符串是否格式正确。这是模式:

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

var isValid = rExp.IsMatch("�") // isValid = true
var isValid = rExp.IsMatch("�xyz") // isValid = false

答案 1 :(得分:1)

在这里:(&#\d{2};)+这应该适用于一次或多次

答案 2 :(得分:0)

(&安培;#\ d {2})*

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