正则表达式匹配另一个正则表达式匹配文本之后的文本

时间:2018-09-03 15:35:22

标签: regex

通常,我想将一个文本与一个模式匹配,然后在其后的文本与另一个模式匹配。我认为这听起来很模糊,因此请看以下示例:

https://regex101.com/r/i35XhG/1

在该示例中,我匹配“机箱ID:”,但我不知道“机箱ID”和“:”之间的空格数,因此我添加了\ s +。第二个捕获组与一组特殊格式的十六进制数字匹配。 现在,我的目标是隔离结果中的十六进制部分,但我只能将其与“机箱ID:”一起使用。我该怎么做?

对于我来说,匹配长度动态的东西是一个普遍的问题,但只在乎并找回之后的东西。

谢谢。

2 个答案:

答案 0 :(得分:0)

您需要做的就是将捕获组包装在括号中,例如:

(Chassis ID\s+: )()([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+)

现在您可以通过3c:61:04:65:22:80访问\3
看这里:https://regex101.com/r/14vr2O/1现在您可以看到Group 3.和您的值。

您也可以将正则表达式简化为此:

(Chassis ID\s+: )((?:[0-9a-f]+:){5}[0-9a-f]+)

答案 1 :(得分:0)

()在正则表达式中创建捕获组您的第一个组捕获了Chassis ID\s+:,而第二个组则什么也没捕获。删除( and周围的Chassis ID\s+:),然后将第二个捕获组的结尾)移到正则表达式的末尾。现在,您可以按第一个捕获组访问3c:61:04:65:22:80

Chassis ID\s+: ([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+)