首页 > 解决方案 > 如何在 RegEx 中对字符串的同一部分使用多个前瞻?

问题描述

我正在尝试解决2019 年代码出现的第四天

我决定用正则表达式来做,首先将数字的数量限制在 6 位。接下来,我必须确保数字从左到右增加。

到目前为止一切顺利,我设法使用以下 RegEx 做到了这一点:

^(?=^\d{6}$)0*1*2*3*4*5*6*7*8*9*$

现在,我想更进一步并添加第二个条件(6 位数字中某处的两个相邻数字,如“22”)。我的以下代码段是独立运行的,但是当将它集成到我以前的 RegEx 中作为前瞻时,它不是。

(\d)\1

现在,由于某种我不知道的原因,我的集成版本无法正常工作。

^(?=^\d{6}$)(?=(\d)\1)0*1*2*3*4*5*6*7*8*9*$

这有什么问题?怎么可能?

先感谢您。

标签: regex

解决方案


您的前瞻坚持认为匹配的数字位于字符串的开头,因为它紧随^. 您需要事先允许其他数字,即(?=\d*(\d)\1)或总计

^(?=\d{6}$)(?=\d*(\d)\1)0*1*2*3*4*5*6*7*8*9*$

正则表达式 101 上的演示


推荐阅读