我已经从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=仍然必须在那里的比赛,它只是不包含在结果中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top