多个括号的正则表达式

时间:2017-11-05 16:24:51

标签: regex

我试图找出正则表达式来搜索下面的内容。

authentication { 
admin-enabled enabled 
syslog-admin-state disabled 
server  1.2.3.4 {
          address 1.2.3.4
          priority 1
          port 49
          admin-enabled enabled
        }
        server  2.3.4.5 {
          address 2.3.4.5
          priority 2
          port 2
          admin-enabled enabled
        }

}

1 个答案:

答案 0 :(得分:0)

这应与您的文字相符;使用原子组语法来处理嵌套括号。

authentication\s*(\{(?>[^{}]+|(?1))*\})

请注意,如果您使用的是PHP,则可能会遇到问题?>部分,因为它可以解释为脚本的结尾。在这种情况下,您可以使用?:而不是。

authentication\s*(\{(?:[^{}]+|(?1))*\})

如果您使用的是Python,那么您可以使用新的正则表达式模块来实现您的要求。

以下是如何安装

sudo yum install python-devel
sudo pip install regex

以下是Python代码的工作示例:

#!/usr/bin/python
import regex
#import re

line = "\
other_object1 { \
  test1 {\
    test1\
  }\
}\
\
authentication { \
admin-enabled enabled \
syslog-admin-state disabled \
server  1.2.3.4 {\
          address 1.2.3.4\
          priority 1\
          port 49\
          admin-enabled enabled\
        }\
        server  2.3.4.5 {\
          address 2.3.4.5\
          priority 2\
          port 2\
          admin-enabled enabled\
        }\
}"

pattern = "authentication\s*(\{(?>[^{}]+|(?1))*\})"
matchObj = regex.search(pattern, line)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
else:
   print "No match!!"