【发布时间】:2016-12-27 18:51:26
【问题描述】:
所以,我正在努力捕捉字符串包含什么样的“语言”sn-p:
语言 sn-p 在 () 内部,是以下组合: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`
我当前的正则表达式:
((\(|,)En(\)|,))|((\(|,)Fr(\)|,))|((\(|,)De(\)|,))|((\(|,)Es(\)|,))|((\(|,)It(\)|,))
什么意思:
((\(|,) <== either starts with `open parenthesis` or `comma` (1)
En <== the language (2)
(\)|,)) <== either ends with `close parenthesis` or `comma` (3)
然后我只需附加正则表达式OR (|)
您可以看到的问题:regexr.com/3ev6p 是,如果有第二种语言 sn-p 即 Fr 它不会满足正则表达式 (1) 因为第一种语言 sn-p En 正在捕获/已经占用open parenthesis 或comma,导致第二语言sn-p Fr 不匹配...
你们知道如何处理完全捕获所有的语言 sn-p 吗?我打算使用 PHP 的preg_match_all() 来获得所有这些。希望有人可以提供帮助。
谢谢!
【问题讨论】:
-
不确定我是否理解正确,但这是您想要的吗? regex101.com/r/PAwqGg/1
-
这个regexr.com/3ev6s 怎么样?
-
@Mi-Creativity,边界应该围绕所有语言。 ;)
-
@sinisake @Mi-Creativity 谢谢
\b他们在学校教这个时我缺席了。谢谢! -
@sinisake 这是真的,如果他在所有语言中都有这个问题(像 Enfoo 这样的词),谢谢你提到它:)