Java 匹配可选模式的正则表达式
我知道正则表达式是一个非常热门的话题,有很多类似的问题,但是,我还没有找到一个符合我需要的 我需要检查字符串的格式,如下所示:Java 匹配可选模式的正则表达式,java,regex,regex-group,Java,Regex,Regex Group,我知道正则表达式是一个非常热门的话题,有很多类似的问题,但是,我还没有找到一个符合我需要的 我需要检查字符串的格式,如下所示: 所有行必须以5位数字开头 字符6到12必须是空白 字符13必须为空格或星号 如果在最后一个句点之前有任何句点、冒号或分号,则字符前面不得有空格,但后面必须有空格 左括号后面不能有空格 右括号前面不能有空格 我还没有尝试实现冒号、分号或括号,但到目前为止,我只停留在句号上。这些字符是可选的,所以我无法进行严格检查,我正在尝试捕捉它们,但在类似这样的情况下,我仍能找到匹
- 所有行必须以5位数字开头
- 字符6到12必须是空白
- 字符13必须为空格或星号
- 如果在最后一个句点之前有任何句点、冒号或分号,则字符前面不得有空格,但后面必须有空格
- 左括号后面不能有空格
- 右括号前面不能有空格
00000 *TEST .FINAL STATEMENT. //Matches, but it shouldn't match.
00001 *TEST2 . FINAL STATEMENT. //Matches, but it shouldn't match.
00002 *TEST3. FINAL STATEMENT. //Matches, **should** match.
这是我到目前为止的正则表达式:
^\d{5}\s{6}[\s\*][^.]*([^.\s]+\.\s)?[^.]*\..*$
我真的看不出这是怎么回事,特别是因为我使用[^.]表示我将接受除句点以外的任何内容作为通配符,并且可选模式乍一看是正确的:如果有句点,它后面不应该有空格,后面应该有空格。试试这个:
^\d{5}\s{6}[\s\*]#您的原始模式
(?:#重复0次或更多次:
[^.:;()]*|#无约束字符
(?
在模式的最后一部分中,具有特殊要求的字符是:;()
,因此使用负数字符集来匹配除这些字符以外的任何字符:[^.:;()]*
,然后替换为:
如果在最后一个句点之前有任何句点、冒号或分号,则字符前面不得有空格,但后面必须有空格
由(?)完成-仅当前面没有空格且后面有空格时,才匹配其中一个字符
左括号后面不能有空格
由\(?!\s)
右括号前面不能有空格
由(
然后在模式结束时在这4种可能性之间交替