PCRE,在打开左大括号后匹配尾部注释



我正在尝试匹配shell脚本中的行,即定义一个函数,该函数名称后有一个左大括号,这样regex只返回左大括号而不返回其他内容。

function {
...
}

左大括号后可能有尾随注释功能

{ # trailing comment

这在表达式中应该是允许的。否则,正则表达式必须剔除所有其他行中留有大括号的实例,其中这些实例不是函数的大括号,并返回";没有匹配";。我正在尝试以下操作:

~/ % pcretest
PCRE version 8.45 2021-06-15
re> "^[^$]*({)+(?!W+w+)s*#?"
data> {
0: {
1: {
data> abc {
0: abc {
1: {
data> abc { #
0: abc { #
1: {
data> abc ${ #
No match
data> abc { # abc
No match
data> 

你看,它运行得很好,除了上次尝试的匹配

data> abc { # abc

它返回";没有匹配";,但我希望它匹配,而我不希望它匹配:

data> abc { abc

分解正则表达式:

"^[^$]*({)+(?!W+w+)s*#?"
  1. 锚定在线路的起点
  2. 如果美元符号在下面的左大括号之前,则返回"0";没有匹配">
  3. 否定先行:忽略大括号后的任何空白和任何适当的单词
  4. 后面跟零个或多个空格和可能的"#">

有什么帮助吗?

我想我找到了解决方案:

^.*?^[^$]*({)+(?!sw)#?

这将像这样匹配(也不匹配(:

~/ % pcretest                                            
PCRE version 8.45 2021-06-15
re> "^.*?^[^$]*({)+(?!sw)#?"
data> {
0: {
1: {
data> abc {
0: abc {
1: {
data> abc { # def
0: abc {
1: {
data> ${
No match
data> abc { def
No match

这正是我想要的。

相关内容

  • 没有找到相关文章

最新更新