• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 正则如何递归匹配大括号?

正则如何递归匹配大括号?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了正则表达式匹配括号,正则匹配括号,正则表达式匹配大括号,正则表达式匹配小括号,正则表达式匹配中括号等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:正则如何递归匹配大括号?
描述:

我有一段字符串:

require './test.php';

function test() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
    }
}

echo 333;
test();

function test2() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
    } else {
        // ...
    }
}

即函数内有N多匹配的{}。

现在想正则匹配出以上字符串所有function,即函数{}包裹的字符串,如何操作?
麻烦PHP或Python示例,多谢。


解决方案1:

http://php.net/manual/en/book.tokenizer.php这组内置函数可以代替正则来解析php代码 会更快

解决方案2:

我看题主的问题中虽然提到了递归,但其实只是说想要函数的大括号包裹的部分,好像并没有提到要把里面的if, foreach之类的语法也要分析出来,所以如果只是希望一个简单的实现的话,这样如何

<?php
$raw = <<<'EOT'
require './test.php';

function test() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
    }
}

echo 333;
test();

function test2() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
    } else {
        // ...
    }
}
EOT;
$matches = [];
preg_match_all('/function (\S+)\s?\{(.*?)\}/s', $raw, $matches);
print_r($matches);

运行结果

Array
(
    [0] => Array
        (
            [0] => function test() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
            [1] => function test2() {
    if (true) {
        foreach ($arr as $v) {
        // ...
        }
        )

    [1] => Array
        (
            [0] => test()
            [1] => test2()
        )

    [2] => Array
        (
            [0] =>
    if (true) {
        foreach ($arr as $v) {
        // ...

            [1] =>
    if (true) {
        foreach ($arr as $v) {
        // ...

        )

)

解决方案3:

.net中有平衡组可以实现任意层嵌套的匹配, php和python中的正则没有支持动态表达式语言,因此无法实现任意层嵌套的匹配


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 正则如何递归匹配大括号?
  • 正则表达式括号嵌套匹配

相关文章

  • 2017-06-07 Laravel无法更改默认加密方式?
  • 2017-06-07 求一个10位userid生成算法
  • 2017-06-07 编程依赖数学知识吗?
  • 2017-06-07 下列有关openSSL的PHP代码,如果用Python实现?
  • 2017-06-07 如何提高关键字匹配的性能
  • 2017-06-07 rails3的route中可否自定义参数形式,不适用默认:id
  • 2017-06-07 同一端口被两个程序监听
  • 2017-06-07 Python使用多线程报出untoundmethod__init__错误的问题
  • 2017-06-07 (golang)Go:如何交换slice中的两个元素?
  • 2017-06-07 (golang)beego的orm每update,delete,read的时候都要给主键值????

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 《着急》为啥文件不刷新啊
    • api支付接口api接口使用https协议是否安全性很高了?
    • php同时向关注用户和推荐用户发送现金红包问题
    • (golang)初学Go语言,哪类小项目适合练手
    • 一道算法题,用python初始化一颗二叉树并求解其最短路径的值
    • Windows下spark
    • Python36中'utf-8'codeccan'tdecodebyteinvalidstartbyte?
    • ac-xxxxclouddncom是七牛哪个业务的域名?如何申请?
    • python菜鸟问一个print的问题
    • 七牛JAVASDK里,PutPolicy和Mac使用完之后需不需要释放?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有