Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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
Php 使正则表达式不捕获或捕获组_Php_Regex - Fatal编程技术网

Php 使正则表达式不捕获或捕获组

Php 使正则表达式不捕获或捕获组,php,regex,Php,Regex,因此,我正在努力捕捉字符串包含的“语言”片段的类型: 语言片段位于()内部,是以下组合:En、Fr、De、Es、It 例如: File (En,Fr,De,Es,It).doc <== should match all 5 languages File (En,Fr) (Required).doc <== should match `En` and `Fr` File (Enfoo,Fr).doc <== should match only `Fr`

因此,我正在努力捕捉字符串包含的“语言”片段的类型:

语言片段位于
()
内部,是以下组合:
En、Fr、De、Es、It

例如:

File (En,Fr,De,Es,It).doc    <== should match all 5 languages
File (En,Fr) (Required).doc  <== should match `En` and `Fr`
File (Enfoo,Fr).doc          <== should match only `Fr`
File (E,Fr).doc              <== should match only `Fr`
然后我只是附加正则表达式
(|)

您可以看到的问题是:如果存在第二语言片段,即
Fr
,它将不满足正则表达式
(1)
,因为第一语言片段
En
已经捕获/占用了
开括号
逗号
,导致第二语言片段
Fr
不匹配

你们知道如何处理所有的语言片段吗?我计划使用PHP的
preg\u match\u all()
来获得所有这些。希望有人能帮忙。
谢谢大家!

您的正则表达式使用语言代码周围的逗号。这意味着,在找到匹配项后,索引位于逗号之后,由于不存在匹配项,正则表达式引擎将跳过该逗号之后的语言

为了匹配此类重叠匹配,可以使用环视仪:

(?<=[(,])(En|Fr|De|Es|It)(?=[,)])
^^^^^^^^^                ^^^^^^^^
请参见

这应与所有:

 (?<=,|\()(\w\w)(?=,|\))

(?我不确定我是否理解正确,但这是你想要的吗?这个怎么样?@Mi creative,所有语言都应该有界限。@sinisake@Mi creative谢谢你的
\b
我在学校教这门课的时候缺席了。谢谢大家!@狼,不客气。享受编码!哇,我也不知道
正向后向
正向前向
。我不应该逃学。标记为附加解释的答案。
\b(En|Fr|De|Es|It)\b
 (?<=,|\()(\w\w)(?=,|\))