是否可以匹配行首的字符串,但只用正则表达式捕获结尾?
Is it possible to match string at the beginning of line, but only capture the end with regex?
我有这样的文字:
[G&]120948103471390857102349871[002]
[A&]512903451029349012390409232[002]
[2&]512903451029349012390409232[002]
我只想匹配以 [G&] 开头的第一行的 [002],但不匹配其他内容。
它将在 "syntax match" 上用于 vim 语法突出显示。
以下应该可以解决问题:
\[G&].*(\[.*])
Here's 演示。
[002]" 位将在正则表达式的第一个捕获组中可用。
依次解释正则表达式中的每一项:
\[G&]
- 我们需要转义开头 [
因为它是正则表达式中的特殊字符,然后我们匹配字符 G
后跟 &
和]
个字符。
.*
- 零个或多个其他字符。
(\[.*])
- 我们匹配左方括号(再次转义)\[
后跟零个或多个任何其他字符 .*
后跟右方括号 ]
.这是我们用括号括起来表示我们要 capture a group.
您可能正在寻找前瞻性
^(?=\[G&\]).+(\[\d+\])\s*$
参见 regex101.com 上的 a working demo。此外,您的演示字符串中有尾随空格,它们是故意的吗?
经过更长时间的谷歌搜索后,我发现 vim 正则表达式具有不同的 lookahead/lookbehind。
这里是:
\(G&.*\)\@<=\(\[\d\d\d\]$\)
我有这样的文字:
[G&]120948103471390857102349871[002]
[A&]512903451029349012390409232[002]
[2&]512903451029349012390409232[002]
我只想匹配以 [G&] 开头的第一行的 [002],但不匹配其他内容。
它将在 "syntax match" 上用于 vim 语法突出显示。
以下应该可以解决问题:
\[G&].*(\[.*])
Here's 演示。
[002]" 位将在正则表达式的第一个捕获组中可用。
依次解释正则表达式中的每一项:
\[G&]
- 我们需要转义开头[
因为它是正则表达式中的特殊字符,然后我们匹配字符G
后跟&
和]
个字符。.*
- 零个或多个其他字符。(\[.*])
- 我们匹配左方括号(再次转义)\[
后跟零个或多个任何其他字符.*
后跟右方括号]
.这是我们用括号括起来表示我们要 capture a group.
您可能正在寻找前瞻性
^(?=\[G&\]).+(\[\d+\])\s*$
参见 regex101.com 上的 a working demo。此外,您的演示字符串中有尾随空格,它们是故意的吗?
经过更长时间的谷歌搜索后,我发现 vim 正则表达式具有不同的 lookahead/lookbehind。
这里是:
\(G&.*\)\@<=\(\[\d\d\d\]$\)