我想匹配如下的字符串模式。
abcd;abcd;sdfdf;sdfdf;sdsdf;
- ';'最多应出现 5 次。(或更少)
- 如果是第 5 个“;”位于末尾,之后不应跟有任何字符
- 在两个“;”之间任何角色都可以在那里。
- 两个“;”之间的字符数是 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/