如何验证正则表达式

时间:2019-07-12 16:41:19

标签: c# regex

我很难对正则表达式的各个部分进行分组。我想验证遵循以下格式的字符串中的一些内容:I-XXXXXX.XX.XX.XX

  1. 验证第一组6个X(I-xxxxxx.XX.XX.XX)不包含字符,并且长度不超过6。

  2. 验证X的第三组(I-XXXXXX.XX.xx.XX)不包含字符,并且仅包含1或2。

现在,我已经对最后一组XX进行了验证,以确保使用

的数字为1-8
string pattern1 = @"^.+\.(0?[1-8])$";

Match match = Regex.Match(TxtWBS.Text, pattern1);
            if (match.Success)
            ;
            else
            { errMessage += "WBS invalid"; errMessage += 
Environment.NewLine; }

我只是想不出如何定位字符串的特定部分。任何帮助将不胜感激,并提前感谢您!

3 个答案:

答案 0 :(得分:1)

您很难在此字符串中添加新的验证,因为它非常通用。让我们看看您在做什么:

^.+\.(0?[1-8])$

找到以下内容:

  • ^字符串的开头

  • .+(除了换行符)所能做的所有事情,基本上都将引擎的光标跳到行尾

  • \.字符串中的最后一个句点,这是因为.+中的贪婪量词位于字符串之前

  • 0?为零(如果可以的话)

  • [1-8]一个1到8之间的数字

  • ()$将先前的两个对象存储在一个组中,如果字符串的结尾不在此之后,它甚至可以回溯并尝试从第二个到最后一个周期进行相同的操作,我们知道这不是一个很好的策略。

这最终会匹配很多奇怪的东西,例如字符串The number 0.1

如果可以的话,让我们尝试模式化更具体的内容

^I-(\d{6})\.(\d{2})\.(\d{1,2})\.([1-8]{2})$

这将匹配:

  • ^I-在字符串开头的I和连字符

  • (\d{6})六位数字,它存储在捕获组中

  • \.一段。到现在为止,如果还有六位数以外的其他数字,则匹配失败,而不是尝试回溯整个位置。

  • (\d{2})\.是一样的东西,只是两位而不是六位。

  • (\d{1,2})\.同样,这里的逗号表示它可以匹配一位和两位数。

  • ([1-8]{2})两位数字,分别在1到8之间。

  • $字符串的结尾。

我希望我能理解您在这里想要匹配的内容。让我知道这是否不是您的想法。

答案 1 :(得分:0)

此正则表达式:

^.-[0-9]{6}(\.[1-8]{1,2}){3}$

将验证以下内容:

  1. 第一个字符可以是任何字符,但长度为1
  2. 后跟破折号
  3. 破折号后面紧跟6个数字0-9(如果该数字可以少于6个字符,例如3到6个字符,则只需将{6}替换为{3,6})。 / li>
  4. 其后是3组字符。每个组都以一个句号进行,长度为1或2,可以是1到8的任意数字。

有效字符串的示例是:

I-587954.12.34.56

这也是有效的:

I-587954.1.3.5

但这不是:

I-587954.12.80.356

因为倒数第二个组包含0,并且因为最后一个组的长度为3。

请让我知道我是否误解了任何规则。

答案 2 :(得分:0)

^I-([0-9]{1,6})\.(.{1,2})\.(0[1-2])\.(.{1,2})$

个以分隔的组。 (\。):

  1. ([[0-9] {1,6})-1-6位数字
  2. (。{1,2})-1-2个单个字符
  3. (0 [1-2])-01或02
  4. (。{1,2})-1-2个单个字符

您可以在输入数据上编写并轻松测试正则表达式,只需使用Google“在线正则表达式”即可