Java 负前瞻正则表达式,直到数字,但没有连续的0
我正在提取一个由3-6个数字组成的字符串。但是,我不希望包含超过3个连续0的数字 我现在得到的是一个常规的前瞻,但是如何实现零部分呢Java 负前瞻正则表达式,直到数字,但没有连续的0,java,regex,Java,Regex,我正在提取一个由3-6个数字组成的字符串。但是,我不希望包含超过3个连续0的数字 我现在得到的是一个常规的前瞻,但是如何实现零部分呢 (\d{3,6})[:|\s]{0,2}([a-zA-Z]{3})((?:(?!\d{3,6}).)*) 输入示例: 010113 tee Some text for a 1000 reasons 020113 mee More text 因此,输入的格式为[3-6数字][3字母标识符][message](重复) 我需要它匹配字符串直到020113,而不仅仅是
(\d{3,6})[:|\s]{0,2}([a-zA-Z]{3})((?:(?!\d{3,6}).)*)
输入示例:
010113 tee Some text for a 1000 reasons 020113 mee More text
因此,输入的格式为[3-6数字][3字母标识符][message]
(重复)
我需要它匹配字符串直到
020113
,而不仅仅是直到1000
您可以嵌套前瞻断言:
((?:(?!(?!\d*000)\d{3,6}).)*)
说明:
(#组1中的匹配/捕获:
(?:#开始非捕获组。
(?!#断言不可能匹配。。。
(?!\d*000)#(除非是包含000的数字)
\d{3,6}#这里是三到六位数的数字。
)#展望结束
.#匹配任意字符
)*#结束非捕获组,重复任意次数
)#捕获组1结束
查看。对于包含超过6位数字的字符串,结果应该是什么?也忽略这一点?字符串已经以6位数字开始了,为什么不在它们之前停止呢?因为我需要那个位,这里的6位数字是日期,但它们可以是3-6位中的任何一位作为日期。我需要将字符串拆分为从一个日期到另一个日期运行的子字符串。现在它也停在1000点。太棒了,谢谢你的详细解释,也谢谢你给我指出那个有用的网站。