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
\s
\(
匹配字面的(
,第一个开口括号。
the the the capturegrout
(.*)
)特殊字符将匹配除Newline以外的所有字符,包括括号。点的点之后是星形量词.
.*
greedy。 dot
*
.
以外的所有字符,因此\n
将捕获所有字符,直到线结束前的最后一个字符才能进行匹配。
.*
匹配字面的
)
,最后一个闭合括号。
\)
匹配一个空格字符。
如果您只是想在-if-line上与外括号的内容匹配,则此正则表面图案将完成该工作(PRCE2 REGEX风味):
)
regex演示:Https://regex101.com/r/k82pml/6 注:
\s
非捕获组
(?:^|\s)if\s(?:\w*\s)*\((.*)\).*\{
匹配文本的匹配开始
(?:...)
(?:^|\s)
^
,包括newline
|
匹配字面意思if
匹配一个空格
if
\s
(字母,数字,下划线),然后是空格字符(?:\w*\s)*
。匹配此模式0或更多次。
*
匹配字面的
\w
,第一个开口括号。 the the the capturegrout用于用不同颜色突出显示的内容。 DOT(
\s
)特殊字符将匹配除Newline以外的所有字符,包括括号。点的点之后是星形量词(...)*
将匹配零或更多字符,并且尽可能多的字符进行匹配,即单独使用\(
greedy。 dot
(
匹配除newline字符(.*)
.
将捕获所有字符,直到线结束前的最后一个字符才能进行匹配。
.*
匹配字面的
*
,最后一个闭合括号。
.
匹配0或更多字符,尽可能多的字符(greedy)
\n
.*
一起进行)
,然后在括号内进行某些内容,然后在末尾进行\)