为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配

/ 猿问

正则表达式匹配

拉丁的传说 2019-10-21 15:31:02

我想写一个正则表达式,匹配之间的任何内容


()

(())

(()())

((()))

()()()

等等



查看完整描述

3 回答

?
慕容4345310

如果您被其正则表达式语法不支持递归匹配的语言所困扰,我为您提供了一个简单的Javascript实现,您应该可以使用该Javascript实现自己选择的语言:


function testBraces(s) {

    for (var i=0, j=0; i<s.length && j>=0; i++)

        switch(s.charAt(i)) {

            case '(': { j++ ; break; }

            case ')': { j-- ; break; }

        }


    return j == 0;

}

在这里,您可以使用它:http : //jsfiddle.net/BFsn2/


查看完整回答
反对 回复 2019-10-21
?
呼如林

这种嵌套结构不能通过正则表达式有效地处理。您需要的是语法和该语法的解析器。就您而言,语法足够简单。如果您使用的是python,请尝试pyparsing或funcparserlib。


使用pyparsing可以执行以下操作:


from pyparsing import nestedExpr

nestedExpr().parseString( "(some (string you) (want) (to) test)" ).asList()

这将返回一个包含嵌套字符串的已解析组件的列表。nestedExpr的默认定界符是括号,因此您无需执行任何其他操作。如果要使用funcpasrerlib,可以尝试以下操作


from funcparserlib.parser import forward_decl, many, a

bracketed = forward_decl()

bracketed.define(a('(') + many(bracketed) + a(')'))

之后,您可以致电


bracketed.parse( "( (some) ((test) (string) (you) (want)) (to test))" )

它将在一个元组中返回已解析的元素。


查看完整回答
反对 回复 2019-10-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信