我正在寻找一种 PCRE 模式,该模式将匹配任何有效 PCRE 模式的定界符之间的文本,而不管使用的定界符和修饰符如何。
问问题
120 次
1 回答
2
据我所知,有四个成对的分隔符:()
, []
, {}
, <>
。所有其他允许的字符只使用两次。根据文档,我们可以使用任何非字母数字、非空白、非反斜杠字符。所以这个模式应该有效:
/
^
(?=([^a-zA-Z0-9\s\\\\])) # make sure the pattern begins with a valid delimiter
# and capture it into group 1
(?| # alternation for different delimiter types
# each alternative captures the pattern into group 2
\((.*)\) # handle (...)
|
\[(.*)\] # handle [...]
|
\{(.*)\} # handle {...}
|
<(.*)> # handle <...>
|
.(.*)\1 # handle all other delimiters with a backreference
)
[imsxeADSUXu]* # allow for modifiers
$
/xs
如果你$pattern
在
preg_match($pattern, $input, $matches);
然后你会在$matches[2]
.
当然,这会接受一堆无效的模式,因为它不能确保分隔符不会出现在模式中的某个位置。
于 2013-08-15T15:44:15.257 回答