正则表达式与模式匹配

时间:2016-04-09 01:53:12

标签: java regex

我想匹配下面的字符串模式。

ABCD; ABCD; sdfdf; sdfdf; sdsdf;

  1. ';'应该出现最多5次。(或更少)
  2. if 5th';'最后,
  3. 之后不应该跟随任何字符
  4. 两个';'之间任何角色都可以在那里。
  5. 两个“;”之间的字符数是5。
  6. 我使用了以下正则表达式。但它没有给出预期的结果。

    (((.{0,5});){0,4}([^;]{0,5})){1}
    

    一旦整个字符串不匹配,它应该是不匹配的。

    我不知道如何制作最后一个角色';'或空的。所以这不包括在我提供的逻辑中。

    详细说明 允许使用以下模式。

    sdfsg;;;;;
    sfdsf;sdfsd;sfsdf;;
    ;;;;
    

    不匹配的例子

    sdfsdf;sdfsd;sdf;sdfd;sdf;sdf;sdf
    

    如果有人可以提供帮助,我真的很感激。如果您提供解决方案,请提供解释,以便学习。

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式

^(?:[^;]{0,5};){1,4}(?:[^;]{0,5};?)?$

视觉解释https://regexper.com/#^%28%3F%3A[^%3B]{0%2C5}%3B%29{1%2C4}%28%3F%3A[^%3B]{0%2C5}%3B%3F%29%3F%24

  • 使用^我们匹配行的开头
  • (?:)是一个非捕获组(如(),但不会将结果存储到组中)
  • 使用[^;]我们匹配除了;
  • 之外的所有字符
  • {0,5}抓0到5非;炭
  • ;最后我们有一个决赛;
  • {1,4}我们匹配之前的模式模式,包括1到4次(
  • ;?最后一个;是,但我们不能在
  • 之后再使用其他字符
  • $行尾

答案 1 :(得分:0)

此正则表达式匹配所有这些规则

^([^;]{0,5};){0,4}[^;]{0,5};?$

([^;]{0,5};)匹配任何一组字母或分号前的分号和分号本身,{0,4}确保在最后一个字符[^;]{0,5}之前不超过4个分号1}}匹配最后一个分号后的任何字符,;?匹配1或没有分号作为最后一个字符,$确保在最后一个分号后没有任何字符。

答案 2 :(得分:0)

你可以试试这个正则表达式:

(?:[^;]*;?){1,5}

它会在;和最多5次之间捕获任何内容。

请参阅Regex101

上的演示