我如何捕获一对括号内的文本,如果该文本本身可能包含括号,则可以在vim?

问题描述 投票:0回答:1
,例如,在以下块中:

if (this is the() clause) { do something; do another thing; }

我想强调文本

"this is the() clause"
,但我无法为此弄清楚这条正常。 我尝试了另一个区域,该区域确实捕获了括号内的

some

文字:

:syntax region cppClause start=/\v\(/hs=e+1 end=/\v\)/he=s-1

但是a)如果文本中有一个
)

字符,它会停止匹配 b)我不确定是否可以在我捕获的较大的

if
区域内筑巢。

有一种更简单的方法吗?

对于下面的正则图案,我使用的是Prce2 Regex风味,应该与Vim

一起使用

如果您想在任何一条线上捕获外括号的内容,则可以使用此正则表达式图案(PRCE2 REGEX风味):
 /\s\((.*)\)\s/g
Regex演示:

Https://regex101.com/r/s7v8zk/9

regex vim syntax
1个回答
0
投票
注:

\s

在第一个开放括号之前开始匹配一个whitespace。
\(

匹配字面的(,第一个开口括号。 the the the capturegrout

用于用不同颜色突出显示的内容。 DOT(

(.*))特殊字符将匹配除Newline以外的所有字符,包括括号。点的点之后是星形量词.

将匹配零或更多字符,并且尽可能多的字符进行匹配,即单独使用
    .*
  • 量词是
    greedy
    。 dot
  • *
  • 匹配除newline字符
    .
    以外的所有字符,因此
    \n
    将捕获所有字符,直到线结束前的最后一个字符才能进行匹配。
  • .*
    匹配字面的
    ),最后一个闭合括号。
    \)
    匹配一个空格字符。
    
    
    如果您只是想在
    -if-line上与外括号的内容匹配,则此正则表面图案将完成该工作(PRCE2 REGEX风味):
    )
    regex演示:
    Https://regex101.com/r/k82pml/6
    
    
    注:
  • \s
    非捕获组
  • (?:^|\s)if\s(?:\w*\s)*\((.*)\).*\{
    匹配文本的匹配开始
    (?:...)
(?:^|\s)
whitespace字符

^,包括newline

|
匹配字面意思

\s

if匹配一个空格

    if
  • 匹配0或多个word字符
    \s
    (字母,数字,下划线),然后是空格字符(?:\w*\s)*。匹配此模式0或更多次。
  • *
    匹配字面的
    \w
    ,第一个开口括号。
    the the the capturegrout
    用于用不同颜色突出显示的内容。 DOT(
    \s
    )特殊字符将匹配除Newline以外的所有字符,包括括号。点的点之后是星形量词
    (...)*
    将匹配零或更多字符,并且尽可能多的字符进行匹配,即单独使用
  • \(
  • 量词是
    greedy
    。 dot
    (
    匹配除newline字符
  • (.*)
  • 以外的所有字符,因此
    .
    将捕获所有字符,直到线结束前的最后一个字符才能进行匹配。
  • .*
    匹配字面的
    *
    ,最后一个闭合括号。
    
    .
    匹配0或更多字符,尽可能多的字符(
    greedy
  • \n
  • 在线末端的字面匹配。为了确保您有适当的条件,如果与
    .*
    一起进行
    )
    ,然后在括号内进行某些内容,然后在末尾进行
  • \)
  • 
        
    	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.