在以下 RegEx :
中((this)|(that))-((?(2)these|(?(3)those)))
我接受以下两种情况之一:
this-these 我得到数组:
Array (
[0] => this-these
[1] => this
[2] => this
[3] =>
[4] => these
)
对于那些我得到的数组:
Array (
[0] => that-those
[1] => that
[2] =>
[3] => that
[4] => those
)
数组类似于被捕获的群组,我想要的是仅捕获these
和those
的群组,我不想将任何其他群组拉到得到数组:
this-these 的情况:
Array (
[0] => this-these
[1] => these
)
那些:
的情况Array (
[0] => that-those
[1] => those
)
我尝试的是以下 RegEx :
(?:(this)|(that))-(?:(?(1)(these)|(?(2)(those))))
但得到了数组:
Array (
[0] => that-those
[1] =>
[2] => that
[3] =>
[4] => those
)
然后尝试 RegEx :
(?:(?:this)|(?:that))-((?(1)(?:these)|(?(2)(?:those))))
哪个是假的,因为(1), (2)
的组不存在。
如何捕获非捕获组以对其应用条件或仅捕获我想要的组。
Additonal Case将是:
this-in-these
this-on-those
that-at-those
that-as-these
答案 0 :(得分:1)
毕竟,看起来你甚至不需要任何条件结构,也不需要后视。
您正在寻找分组构造,捕获和非捕获组合的组合:
(?:this-[io]n|that-a[ts])-(these|those)
请参阅regex demo
(?:this-[io]n|that-a[ts])-(these|those)
将
(?:this-[io]n|that-a[ts])
- 匹配this-in
,this-on
,that-at
或that as
(由于非捕获组 { {1}})(?:...)
- 连字符-
- 捕获第1组:(these|those)
或these
。您的原始问题可以通过后视来解决:
those
见this regex demo。但是,如果(?:this|that)-((?<=this-)these|those)
或this
模式可能不同,正则表达式可能不起作用,因为大多数正则表达式引擎不支持未知宽度的后观模式,除非您在最新的Chrome中使用.NET或JavaScript版本,或Python中的PyPi正则表达式。
此处,that
非捕获组与(?:this|that)
或this
匹配,然后匹配连字符,如果当前位置为,则that
被捕获到组1中以these
开头,否则this-
被捕获。