gpt4 book ai didi

regex - 破译 vim 正则表达式

转载 作者:行者123 更新时间:2023-12-02 00:21:54 27 4
gpt4 key购买 nike

我正在玩 vim-ruby 缩进,那里有一些非常复杂的正则表达式:

" Regex used for words that, at the start of a line, add a level of indent.
let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
\ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
\ '\|rescue\):\@!\>' .
\ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
\ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'

在 vim 文档的帮助下,我将其解读为:

start-of-line <any number of spaces> <start matching> <beginning of a word> /atom
<one of provided keywords> <colon character> <nothing> <end of word> ...

我有一些疑问:

  1. 它真的匹配':'吗?似乎不像那样工作,但我没有看到冒号是正则表达式中的一些特殊字符。
  2. 为什么有 \zs(比赛开始)而没有 \ze(比赛结束)?
  3. \%() 是做什么的?它只是某种形式的分组吗?

最佳答案

  1. :\@! 表示只有在不是冒号时才匹配,如果我没看错的话。我不熟悉与之匹配的 ruby​​ 语法,所以这可能不太正确。有关环顾四周的更多信息,请参阅 :help/\@! 和相关主题。

  2. 你可以有一个 \zs 而没有 \ze,这只是意味着匹配的结尾在正则表达式的结尾。反之亦然。

  3. \%(\) 只是像 \(\) 一样创建一个分组,除了该组不可用作反向引用(就像是在 :substitute 命令中使用)。

关于regex - 破译 vim 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com