日期:2014-05-18  浏览次数:20895 次

一个关于字符串处理的问题
判断文本框中的输入是否正确,该输入应该符合以下规则:
例如:dts-4A*2|yys02.950*3|kuyd/5*4|
即该字符串可分为几个子字符串,上例就可分为dts-4A*2|     yys02.950*3|     kuyd/5*4|三个字符串,每个子字符串有以下特点:以*、数字(大于0的自然数)、|结尾。*之前必须有字符,这些字符可为字母(大小写)、数字、.(点)、/(反斜杠)、-(连词符),但是不能包含*和|两种字符。整个输入字符串必须由1个或多个这样的子字符串组成。
怎样判断整个输入是否正确?应该将整个字符串分解成各个以*、数字(大于0的自然数)、|结尾的子字符串,然后用正则表达式判断吗?那么判断整个字符串格式的郑泽表达式该怎么写?判断各个子字符串的正则表达式有该怎么写?


------解决方案--------------------
-_-#...

楼主如果把问题描述清楚了,一个帖子就可以了,没必要再开一帖的

^(?:[a-zA-Z0-9/.-]+\*[1-9][0-9]*\|)+$

如上的写法,是先通过取得符合条件的单个子串,然后由这样的子串重复组成整个字符串,看是否匹配,这样在判断整个字符串的过程中,实际上就已经包含了对子串的判断了,如果不是要取出子串,就没必要再对子串进行单独判断了


感觉楼主对正则的理解还不是很透彻,说一下你的应用环境吧,是在验证控件里,还是在程序里,验证控件里就用上面的正则就可以了,如果是在程序里,用如下代码测试

string test = "dts-4A*2|yys02.950*3|kuyd/5*4| ";
if (Regex.IsMatch(test, @ "^(?:[a-zA-Z0-9/.-]+\*[1-9][0-9]*\|)+$ "))
{
MessageBox.Show( "符合要求,子串分别为: ");
MatchCollection mc = Regex.Matches(test, @ "[a-zA-Z0-9/.-]+\*[1-9][0-9]*\| ");
foreach (Match m in mc)
{
MessageBox.Show(m.Value);
}
}
else
{
MessageBox.Show( "不符合要求! ");
}