在'^ 0xDD'首次出现之前匹配所有'^ 0xCD'

时间:2017-01-05 09:45:42

标签: regex

我需要执行多行搜索,在一行的开头匹配所有0xCD,直到0xDD的第一次出现也在行的开头。

我尝试使用此(?s)^0xCD(?=.*?^0xDD),但它只匹配^0xCD之后的所有^0xDD

我正在使用Sublime Text 3编辑器启用正则表达式。

输入

0xCD 0xAA 0xBB
0xAA 0xBB
0xCD 0x78
0xAA 0xBB
0xDD 0xBB
0xCD 0xBB
0xDD 0xA4
0xCD

作为输出,我希望ST3找到0xCD的两个匹配项。第1行,第3行。真正的文件确实要大得多,并且当正则表达式匹配将为我节省大量的计数时,出现在ST3的状态栏中的出现次数。 0xAA 0xBB

1 个答案:

答案 0 :(得分:1)

您可以使用基于\G的正则表达式:

(?s)\G(?:(?!0xDD).)*?\K0xCD

<强>详情:

  • (?s) - 内联DOTALL修饰符,使.匹配换行符号
  • \G - 在字符串开头匹配,然后在每次成功匹配后匹配的锚点
  • (?:(?!0xDD).)*? - 一个驯化的贪婪令牌,匹配任何不是0xDD字符序列起点的字符,以懒惰方式匹配,即先跳过模式,然后再跳过首先尝试模式,并且只有当它们找不到匹配项时,才会“扩展”此标记(如果删除?,则令牌将无法正常工作)
  • \K - 匹配重置运算符,在当前迭代期间丢弃所有匹配的文本
  • 0xCD - 要匹配的子字符串,并作为匹配“返回”。