题
我已经从ldapsearch
对象输出的列表如下所示:
dn: cn=HPOTTER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=HGRANGER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=RWEASLEY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=DMALFOY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=SSNAPE,ou=FACULTY,ou=HOGWARTS,o=SCHOOL
dn: cn=ADUMBLED,ou=FACULTY,ou=HOGWARTS,o=SCHOOL
到目前为止,我有以下的正则表达式:
/\bcn=\w*,/g
它返回结果是这样的:
cn=HPOTTER,
cn=HGRANGER,
cn=RWEASLEY,
cn=DMALFOY,
cn=SSNAPE,
cn=ADUMBLED,
我需要一个返回一个正则表达式的结果是这样的:
HPOTTER
HGRANGER
RWEASLEY
DMALFOY
SSNAPE
ADUMBLED
什么我需要在我的正则表达式这样的图案(cn=
和逗号)更改没有在业绩中包括?
修改:强>我将使用sed
做模式匹配,并且管道输出到其他命令行实用程序
解决方案
听起来更像一个简单的解析问题,而不是正则表达式。一个ANTLR语法将在任何时间排序了这一点。
其他提示
您将必须执行的分组。这是通过修改的正则表达式来完成的:
/\bcn=\(\w*\),/g
这会然后填充你的结果到一个分组变量。根据您的语言如何提取这个值会有所不同。 (对于你的 SED 变量将是\ 1)
请注意,大多数正则表达式的味道你没有逃跑的括号(),但由于您使用的 SED 的你需要如上图所示。
有关正则表达式的优秀资源我建议:精通正则表达式
OK,你问更具体的问题的地方被关闭作为这种“精确复制”,所以我复制我的答案从那里到这里:
如果你想使用SED,您可以使用类似以下内容:
sed -e 's/dn: cn=\([^,]*\),.*$/\1/'
您有因为SED使用[^,]*
,.*
是“贪婪”,这意味着它会寻找任何下列字符匹配之前一切可能。这意味着,如果你在你的模式中使用\(.*\),
它将匹配到最后一个逗号,没有达到第一个逗号。
请查看快报我已经用它在过去建立我的正则表达式。这是好事,帮助学习过。
在快速和肮脏的方法是使用子匹配假设你的引擎支持它:
/\bcn=(\w*),/g
然后,你会想要得到的第一个子匹配。
不知道你所使用的语言,我们不能告诉是肯定的,但在大多数正则表达式解析器,如果你使用括号,如
/ \ BCN =(\ W *),/克
然后你就可以得到第一个匹配模式(通常\ 1)正是你所搜索的内容。具体而言,我们需要知道你使用的是什么语言。
如果您正则表达式支持向前看符号和Lookbehinds那么你可以使用
/(?<=\bcn=)\w*(?=,)/g
这将匹配
HPOTTER
HGRANGER
RWEASLEY
DMALFOY
SSNAPE
ADUMBLED
但不cn=
或两边的,
。逗号和cn=
仍然必须在那里的比赛,它只是不包含在结果中。