正则表达式,如何在PHP中添加更多匹配条件

正则表达式,如何在PHP中添加更多匹配条件,php,regex,Php,Regex,各位。我想请求帮助用PHP编写regex语句 // This will match everything between "(" and ")" '#('.preg_quote('(').')(.*)('.preg_quote(')').')#si' //But I want to add one more condition //-> Only match before "(" contains at least 2 Capital Letters continued. 比

各位。我想请求帮助用PHP编写regex语句

 // This will match everything between "("  and ")"  
'#('.preg_quote('(').')(.*)('.preg_quote(')').')#si'

//But I want to add one more condition 
//-> Only match before "(" contains at least 2 Capital Letters continued.
比如说,

 // (bbbbb)     <- No
 // aa(bbbbb)   <- No
 // A(bbbbb)    <-No
 // AA(bbbbb)   <- Yes
 // AAA(bbbbb)   <- Yes

/(bbbbb)您可以这样创建正则表达式:

$regex = '#[A-Z]{2,}\((.*)\)#';
注意,我已经删除了不区分大小写的模式修饰符
I
,因为您确实需要区分大小写。我还删除了
s
pattern修饰符,因为我猜您不希望跨多行进行这种比较

你可以考虑不贪婪的模式修饰符<代码> u>代码>如果你希望在一行上有多个非嵌套的括号集合,并且你想单独捕获它们(即<代码> AA(BBBB)CC(DDDDD)< /代码>)。 还请注意,我去掉了所有的

preg_quote()
无意义的东西,因为它使您的模式更难阅读。对于需要转义的模式中插入变量字符串数据的情况,最好保存该函数。这里的情况并非如此

$re = "/^[A-Z]{2,}\([a-z]{5}\)$/";

我还添加了
^
$
。如果要在字符串中搜索匹配项,可以删除这些运算符,但如果要严格匹配传递给
preg\u match
的整个字符串,则可能需要保留它们。

非常感谢!我不知道我和s到底是干什么的,谢谢你的解释@Mike Brant解释说,您不应该使用i标志,因为您希望它区分大小写,这是正确的。我会继续使用他的方法,除非你的要求是括号内需要5个字符。