如何解决匹配gcc -L编译器参数-表达式,仅当空格之间用撇号引起来时才使用空格
假设我下面有一些gcc命令行:
gcc main.c -o main -lwhatever -lsomeother -Lpath/to/whatever -L"/path to the/someotherlib"
如何匹配path/to/whatever
和"/path to the/someotherlib"
(带或不带撇号)?
可能我应该使用一些环顾四周,但是我无法弄清楚到底是怎么回事。
我开始构建类似下面的表达式
(?<=-L)(.*)(?=\s)
然后我添加了撇号:
(?<=-L)"?(.*)"?(?=\s)
结果证明我无法以这种方式解决问题,因为.*
会匹配任何字符,并且在后面的外观中与\s
发生冲突(也许会消耗掉它,但我认为我什至必须谨慎声明)。
如果我将[^\s]
放在.
的位置,那么它将不计算表达式是否在撇号之间,匹配将在第一个空白处结束。
解决方法
该值可以通过合并第2组和第3组来获得。
\s-L(?:(["'])((?:(?!\1).)*)\1|(\S*))
https://regex101.com/r/uYnUTA/1
或https://regex101.com/r/mBp1eH/1
\s -L # whitespace then -L param
(?: # One of these values
( ["'] ) # (1),quote delimiter
( # (2 start)
(?: # content within quotes
(?! \1 ) # Not a quote
. # this char is ok
)* # do 0 to many
) # (2 end)
\1 # backref to quote
| ( \S* ) # (3),Or,non-quote parameter
)
请注意,在引号内对分隔符的任何特殊转义也可以进行。
只是这里还没完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。