Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:正向前瞻未在指定的数字范围内停止?_Regex - Fatal编程技术网

Regex 正则表达式:正向前瞻未在指定的数字范围内停止?

Regex 正则表达式:正向前瞻未在指定的数字范围内停止?,regex,Regex,我寻找类似的问题,但找不到确切的我需要的。例如,我有以下数据字符串: 2016 12 2017 01 2017 02 2017 03 2017 04 2017 05 2017 06 2017 07 2017 12 2018 01 2018 02 2018 03 2018 04 2018 05 2018 06 2018 07 我只需要筛选一个选定的范围,在这种情况下,从2017年5月到2018年4月。我正在使用这个正则表达式: ((?=2017).*(?=0[5-9]|1[0-2]).*)|((

我寻找类似的问题,但找不到确切的我需要的。例如,我有以下数据字符串:

2016 12
2017 01
2017 02
2017 03
2017 04
2017 05
2017 06
2017 07
2017 12
2018 01
2018 02
2018 03
2018 04
2018 05
2018 06
2018 07
我只需要筛选一个选定的范围,在这种情况下,从2017年5月到2018年4月。我正在使用这个正则表达式:

((?=2017).*(?=0[5-9]|1[0-2]).*)|((?=2018).*(?=0[1-4]).*)

这在2017年的范围内运行良好,但仅继续包括2018年| 05年及以后。知道为什么会发生这种情况吗?

这将匹配您连续约会范围内的任何情况。
注意,这并不强制连续(升序)月/日,但必须是连续的年,因为它是从开始到结束的

(?:2017[](?:0[5-9]| 1[0-2])\r?\n)+(?:2018[]0[1-4](?:\r?\n |$)+

扩大

 (?:
      2017 [ ]                      # 2017
      (?: 0 [5-9] | 1 [0-2] )       # 05 - 12
      \r? \n 
 )+
 (?:
      2018 [ ]                      # 2018
      0 [1-4]                       # 01 - 04
      (?: \r? \n | $ )
 )+

你知道为什么会这样吗

模式的下半部分
((?=2018)。*(?=0[1-4]).*
将如下匹配(使用
可视化空间):

对于2018\u 01行

(?=2018)
匹配
2018

*
匹配
2018\uu

(?=0[1-4])
匹配
01

*
匹配
01

对于2018年第05号线

(?=2018)
匹配
2018

*
匹配
2

(?=0[1-4])
匹配
01
(2018年中间两位数)

*
匹配
018_01

尝试使用
(2017(?=0[5-9]|1[0-2])。|(2018(?=0[1-4])。
为什么要使用lookaheads?只做普通匹配。你用什么编程语言?