使正则表达式使用右括号


Make regex work with a closing bracket

我有以下正则表达式:

$regex = '/(?:(?:'b(?:pp|[Ww]ars|['.!?)]?'s*f|vs)['.!?)]'s))'Z/mu';

它匹配:

$string = 'Wars! ';

但我希望它与以下场景相匹配:

$string = 'Wars!) ';

我在那里加了最后一个括号,但显然我做错了什么。

您可以将*量词添加到最后一个[.!?)],以匹配零次或多次出现:

(?:(?:'b(?:pp|[Ww]ars|[.!?)]?'s*f|vs)[.!?)]*'s))'Z
                                           ^

查看regex演示

还要注意,字符类中的.不必进行转义以匹配文字点符号。