首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索文本匹配,后面跟着不包含第二个文本的文本

搜索文本匹配,后面跟着不包含第二个文本的文本
EN

Stack Overflow用户
提问于 2015-01-23 13:25:44
回答 1查看 93关注 0票数 0

我想匹配以下序列(所有不区分大小写):

  • 字面上的“调用”(请注意,这可能是调用或调用)
  • 可变长度空格(制表符或空格;没有换行符)
  • 文字"_“(下划线-防止对包含文本”调用“的注释的大部分点击)
  • 任何不包含文字“引导”的文本。

最后一个条件是我的问题。

我正在用Sublime 3执行搜索(使用Perl/Boost regex语法?)

我试图修改在javascript匹配单词不跟在文本之间的模式上给出的解决方案,但没有成功

我想出的最好办法是

代码语言:javascript
复制
call[\t ]+?_(?:(?!boot).){4,}?

但这依赖于函数名称中的字符数。

此搜索的目的是通过引导加载器dis-程序集列表进行搜索,以确保它没有调用引导加载器内存空间之外的任何函数(所有已验证的函数的名称中都有文本"boot“)。下划线来自编译器名称-mangling。

示例文本(点击被标记为命中)

代码语言:javascript
复制
 88811 000294  00 A0 A9         bclr.b    _RCONbits,#5    ;,
 88813 000296  00 00 07         call    _vBootInitSerialBuffer    ;
 88815 000298  F0 0E 20         mov    #239,w0    ;,
 88816 00029a  00 00 07         rcall    _vBootInitSerial_C1    ;
 88818 00029c  F0 0E 20         mov    #239,w0    ;,
 88819 00029e  00 00 07         rcall    _vBootInitSerial_C2    ;
 88821 0002a0  00 40 EB         clr.b    w0    ; tmp38
 88822 0002a2  00 E0 B7         mov.b    WREG,_gbTurnOnLED    ; gbTurnOnLED
 89049 00032e  E0 0F 50         sub    w0,#0,[w15]    ; tmp56,
 89050      Call the routine
 89051 000330  00 00 3A         bra    nz,.L50    ;
 89053 000332  10 C0 B3         mov.b    #1,w0    ;,
 89054 000334  00 00 07         rcall    _memcpy    ;  <HIT>
 89055 000336  00 00 37         bra    .L50    ;
 89054 000334  00 00 07         rcall    _BxootGGashLED    ; <HIT>
 89055 000336  00 00 37         bra    .L50    ;
 89054 000334  00 00 07         rcall    _BootFlashLED    ;
 89054 000334  00 00 07         call    _ln    ; <HIT>
 89055 000336  00 00 37         bra    .L50    ;
 89054 000334  00 00 07         call    _vBoootFlashLED    ; <HIT>
 89055 000336  00 00 37         bra    .L50    ;
 89054 000334  00 00 07         rcall    _u8BootGGashLED    ;
 89055 000336  00 00 37         bra    .L50    ;
 89054 000334  00 00 07         rcall    _u16bootGGashLED    ;
 89055 000336  00 00 37         bra    .L50    ;
 89056                  .L49:
 89058 000338  00 00 80         mov    _gu16_50HzTimerTick,w0    ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-23 13:32:35

您可以简化正则表达式:

代码语言:javascript
复制
r?call[\t ]+_(?!.*boot).*

如果沿途没有遇到任何callrcall (在这种情况下,它无法完全匹配),将从bootrcall匹配到行的末尾。

不要忘记设置不区分大小写的修饰符(或者在正则表达式的开头添加一个(?i) )。

测试它在regex101.com上直播

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28110940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档