java - 正则表达式与模式匹配

标签 java regex

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

abcd;abcd;sdfdf;sdfdf;sdsdf;

  1. ';'最多应出现 5 次。(或更少)
  2. 如果是第 5 个“;”位于末尾,之后不应跟有任何字符
  3. 在两个“;”之间任何角色都可以在那里。
  4. 两个“;”之间的字符数是 5。

我使用了以下正则表达式。但它没有给出预期的结果。

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

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

我不知道如何使最后一个字符“;”或空。因此,这不包含在我提供的上述逻辑中。

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

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

不匹配的示例

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

如果有人能提供帮助,我将非常感激。如果您提供解决方案,请给出解释,以便有助于学习。

最佳答案

尝试这个正则表达式

^(?:[^;]{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 次(含)
  • ;? 最后一个 ;是可选的,但后面不能有另一个字符
  • $ 行尾

关于java - 正则表达式与模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511862/

相关文章:

java - 如何同时执行 "if"和 "else"?

java - 如何获取明天的日期时间,即以毫秒为单位的一天结束时间

regex - Google Colab 使用什么类型的正则表达式来查找和替换功能

python - 如何匹配正则表达式并获取先行词

javascript - 如何从 URL 获取 YouTube 视频 ID?

java - 大富翁游戏开发

java - 如何避免 Quartz Scheduler 中的多个线程触发同一个作业?

java - 为什么允许从静态对象进行非静态引用?

python - 解析姓名和学位?

regex - 删除数组中除正则表达式模式以外的所有字符