assert(isCorrect('') === true);
assert(isCorrect('()') === true);
assert(isCorrect('{()}') === true);
assert(isCorrect('{()}{}') === true);
assert(isCorrect('(())') === true);
assert(isCorrect('{({({({()})})})}') === true);
assert(isCorrect('{(})') === false);我对preg_match有这样的结果:
function isCorrect($source){
return (bool)preg_match('~^((\(([^)(}{]|(?1))*\))|\{(?3)*\})*$~', $source);
}现在,我只有通过preg_replace()才有同样的东西;
发布于 2014-09-24 14:24:12
发布于 2014-09-24 15:38:23
执行递归可能有点棘手。
当然,你必须单独考虑平衡对,否则就不起作用。
如果只期望字符(){},那么这一个。
# '~(\((?:(?>(?1))|)\)|\{(?:(?>(?1))|)\})~'
( # (1 start)
\(
(?:
(?> (?1) )
|
)
\)
|
\{
(?:
(?> (?1) )
|
)
\}
) # (1 end)或者,如果您希望在(){}内还有其他字符,那么这个字符。
# '~(\((?:(?>[^(){}]+)|(?1))*\)|\{(?:(?>[^(){}]+)|(?1))*\})~'
( # (1 start)
\(
(?:
(?> [^(){}]+ )
|
(?1)
)*
\)
|
\{
(?:
(?> [^(){}]+ )
|
(?1)
)*
\}
) # (1 end)https://stackoverflow.com/questions/26016745
复制相似问题