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)(?=,|\))