为了账号安全,请及时绑定邮箱和手机立即绑定

Go Negative LookAhead 替代方案

Go Negative LookAhead 替代方案

Go
慕莱坞森 2022-04-26 10:41:10
我想知道是否有任何方法可以正则表达式匹配包含 qcc 但后面没有 -c 的字符串?例如以下两个将匹配:sdfsd/sdfs/d qcc -lang-c++ -Vgcc_ntoaarch64le -shared -o /dfgdfg/dfg/dfg/d -Wl -Wl,--gc-sections /fgdfgdfg/dfgdfgd/fdgdqcc -lang-c++ -Vgcc_ntoaarch64le -shared -o /dfgdfg/dfg/dfg/d -Wl -Wl,--gc-sections /fgdfgdfg/dfgdfgd/fdgd但以下不会:/sdfsd/sdf/sd/fs/df/dsfds/ qcc -lang-c -Vgcc_ntoaarch64le -c -o /sdfsd/dfsdfsd/sdfsd -Wall -fmessage-length=0 -Wformat-security -g -Os -D_FORTIFY_SOURCE=2 -Wno-error=format-security -DFORD_SECTION -DFNV2LOG_DEBUG -std=gnu11 dir.c
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

匹配这样的选项字符串永远不会真正健壮,但是如果您知道可能的输入字符串(即知道选项的顺序和/或选项永远不会合并),它应该相当简单。不确定我是否会打扰正则表达式。你可以这样做:

if strings.Contains(s, "qcc") && !strings.Contains(s, " -c ") { do something }

然后您不必担心选项的顺序,尽管您确实需要知道选项 -c 将始终以某种方式呈现(例如,周围有空格)。


查看完整回答
反对 回复 2022-04-26
?
当年话下

TA贡献1890条经验 获得超9个赞

Go regex (RE2) 不支持使这变得容易的断言。

因此,必须分别处理两个正则表达式条件:

  1. gcc存在 :/\bgcc\b/

  2. -c不遵循下游: /\bgcc\b.+?\b-c\b/

验证匹配逻辑 if #1 and not #2成功的地方。


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信