RegEx排除一个或另一个字符

 拍友2502881913 发布于 2023-02-06 06:50

我想用RegEx 排除一个另一个角色.我有一个搜索模式的RegEx \[([^\[]+\]\=\>(.*).

我的问题是最后的捕获模式.后面的字符串>应该后跟逗号或右括号.

这是我的文字:Array([0]=>123,[1]=>Array([a]=>1,[b]=>2))我想得到:

// match 1
0 = 0
1 = 123

// match 2
0 = 1
1 = Array([a]=>1,[b]=>2)

这是我的RegEx:\[([^\[]+)\]\=\>([^,\)]+)\)?但我得到:

// match 1
0 = 0
1 = 123

// match 2
0 = 1
1 = Array([a]=>1

// match 3
0 = b
1 = 2

Krzysztof Ko.. 5

字符类[^,\)]显式排除逗号,因此它永远不会匹配Array([a]=>1,[b]=>2).

如果只使用一个嵌套级别就可以了,可以尝试以下方法: \[([^\]]+)\]=>(Array\([^\)]+\)|[^,\)]+)?

如果要使用任意嵌套定义Array,则无法使用正则表达式解决此问题,因为要解析的语言不是常规语言.您应该使用解析器生成器或编写递归下降解析器,它实现以下语法:

Start : Array
Array : "Array" "(" ElementList ")"
ElementList : "" | Elements
Elements : Element | Element "," Elements
Element : "[" String "]" "=>" Value
Value : Number | Array
Number : [1-9][0-9]*
String : [^\]]+

尝试为JavaScript寻找解析器生成器.PEG.js是一个例子:http://pegjs.majda.cz/

1 个回答
  • 字符类[^,\)]显式排除逗号,因此它永远不会匹配Array([a]=>1,[b]=>2).

    如果只使用一个嵌套级别就可以了,可以尝试以下方法: \[([^\]]+)\]=>(Array\([^\)]+\)|[^,\)]+)?

    如果要使用任意嵌套定义Array,则无法使用正则表达式解决此问题,因为要解析的语言不是常规语言.您应该使用解析器生成器或编写递归下降解析器,它实现以下语法:

    Start : Array
    Array : "Array" "(" ElementList ")"
    ElementList : "" | Elements
    Elements : Element | Element "," Elements
    Element : "[" String "]" "=>" Value
    Value : Number | Array
    Number : [1-9][0-9]*
    String : [^\]]+
    

    尝试为JavaScript寻找解析器生成器.PEG.js是一个例子:http://pegjs.majda.cz/

    2023-02-06 07:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有