首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过preg_replace()使用reg编写函数

如何通过preg_replace()使用reg编写函数
EN

Stack Overflow用户
提问于 2014-09-24 12:19:24
回答 2查看 81关注 0票数 0
代码语言:javascript
复制
assert(isCorrect('') === true);
assert(isCorrect('()') === true); 
assert(isCorrect('{()}') === true);
assert(isCorrect('{()}{}') === true); 
assert(isCorrect('(())') === true);
assert(isCorrect('{({({({()})})})}') === true); 
assert(isCorrect('{(})') === false);

我对preg_match有这样的结果:

代码语言:javascript
复制
function isCorrect($source){
    return (bool)preg_match('~^((\(([^)(}{]|(?1))*\))|\{(?3)*\})*$~', $source);
}

现在,我只有通过preg_replace()才有同样的东西;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 14:24:12

^((\(([^)(}{]|(?1))*\))|\{(?3)*\})*$递归模式从我昨天的评论检查字符串是否由正确嵌套的({}) /{(())}组成^开始到$结束。

假设您想替换所有,使用空字符串""正确嵌套的,请将其更改为:

代码语言:javascript
复制
$str = preg_replace('~\(([^)(}{]|(?0))*\)|\{(?1)*\}~', "", $str);

regex101测试eval.in测试Regex常见问题

请重新表述你的问题,如果不是这样的话,你会怎么做?

票数 0
EN

Stack Overflow用户

发布于 2014-09-24 15:38:23

执行递归可能有点棘手。

当然,你必须单独考虑平衡对,否则就不起作用。

如果只期望字符(){},那么这一个。

代码语言:javascript
复制
 # '~(\((?:(?>(?1))|)\)|\{(?:(?>(?1))|)\})~'

 (                      # (1 start)
      \(
      (?:
           (?> (?1) )
        |  
      )
      \)
   |  
      \{
      (?:
           (?> (?1) )
        |  
      )
      \}
 )                      # (1 end)

或者,如果您希望在(){}内还有其他字符,那么这个字符。

代码语言:javascript
复制
 #  '~(\((?:(?>[^(){}]+)|(?1))*\)|\{(?:(?>[^(){}]+)|(?1))*\})~'

 (                           # (1 start)
      \(
      (?:
           (?> [^(){}]+ )
        |  
           (?1) 
      )*
      \)
   |  
      \{
      (?:
           (?> [^(){}]+ )
        |  
           (?1) 
      )*
      \}
 )                           # (1 end)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26016745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档