选择每个字母组后面的两个字母 - \ w

时间:2016-12-13 09:18:36

标签: regex sublimetext3

以下是示例字符串

  <00> 00 00 00 12 A0 F5 CD 02 28 10

突出显示的是要匹配的组: 00 00 00 12 A0 F5 CD 02 28 10

我试过这个

(?<=12.*)\w{2}

但似乎无效。

5 个答案:

答案 0 :(得分:2)

您可以使用

(?:\G(?!\A)|\b12\b)\s*\K[A-Z0-9]+

请参阅regex demo

<强>详情:

  • (?:\G(?!\A)|\b12\b) - 匹配上一次成功匹配(\G(?!\A))或(|)完整字12\b12\b
  • \s* - 0+ whitespaces
  • \K - 省略目前为止匹配的文字
  • [A-Z0-9]+ - 一个或多个大写字母或数字。

enter image description here

答案 1 :(得分:1)

必须语言不支持可变长度外观。如果你想在12之后有6个字节,那么你可以这样做:

12 \K( ?[0-9A-F]{2}){6}

示例here

答案 2 :(得分:1)

我不确定我理解,但是如果你想跳过前12个字符,并且匹配每个\ w \ w之后:

(^.{12})((?:(?:\w\w) ?)*)

第1组是跳过的字符。 第2组是您想要的信息。

Here就是一个例子。

编辑:我的困惑来自12出现在12个字符之后的事实。

this效果更好吗?

12 ?((?:(?:\w\w) ?)*)

答案 3 :(得分:1)

^.*12\K|\G(?!^)\s*\K\w{2}

你可以尝试这个。比较第一个空白比赛。参见演示。

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

答案 4 :(得分:1)

protected List<Map<String, List<List<Integer>>>> pCode; protected List<Map<String, List<Map<String, String>>>> sType;

你也可以尝试这个简单的。

<强>代码:

(?<!00)(?:\s)\K[A-Z0-9]{2}

<强>输出:

<?php

$string="00 00 00 12 A0 F5 CD 02 28 10";
preg_match_all('/(?<!00)(?:\s)\K[A-Z0-9]{2}/', $string,$matches);
print_r($matches);