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