当前位置: 首页 > 面试题库 >

vim regex和普通regex有什么区别?

程墨竹
2023-03-14
问题内容

我注意到vim的替代正则表达式与其他正则表达式有些不同。它们之间有什么区别?


问题答案:

如果用“正常正则表达式”来表示Perl兼容正则表达式(PCRE),那么Vim帮助就Vim的正则表达式和Perl的区别提供了一个很好的总结:

:help perl-patterns

从Vim 7.2开始,它是这样的:

9. Compare with Perl patterns                           *perl-patterns*

Vim's regexes are most similar to Perl's, in terms of what you can do.  The
difference between them is mostly just notation;  here's a summary of where
they differ:

Capability                      in Vimspeak     in Perlspeak ~
----------------------------------------------------------------
force case insensitivity        \c              (?i)
force case sensitivity          \C              (?-i)
backref-less grouping           \%(atom\)       (?:atom)
conservative quantifiers        \{-n,m}         *?, +?, ??, {}?
0-width match                   atom\@=         (?=atom)
0-width non-match               atom\@!         (?!atom)
0-width preceding match         atom\@<=        (?<=atom)
0-width preceding non-match     atom\@<!        (?!atom)
match without retry             atom\@>         (?>atom)

Vim and Perl handle newline characters inside a string a bit differently:

In Perl, ^ and $ only match at the very beginning and end of the text,
by default, but you can set the 'm' flag, which lets them match at
embedded newlines as well.  You can also set the 's' flag, which causes
a . to match newlines as well.  (Both these flags can be changed inside
a pattern using the same syntax used for the i flag above, BTW.)

On the other hand, Vim's ^ and $ always match at embedded newlines, and
you get two separate atoms, \%^ and \%$, which only match at the very
start and end of the text, respectively.  Vim solves the second problem
by giving you the \_ "modifier":  put it in front of a . or a character
class, and they will match newlines as well.

Finally, these constructs are unique to Perl:
- execution of arbitrary code in the regex:  (?{perl code})
- conditional expressions:  (?(condition)true-expr|false-expr)

...and these are unique to Vim:
- changing the magic-ness of a pattern:  \v \V \m \M
   (very useful for avoiding backslashitis)
- sequence of optionally matching atoms:  \%[atoms]
- \& (which is to \| what "and" is to "or";  it forces several branches
   to match at one spot)
- matching lines/columns by number:  \%5l \%5c \%5v
- setting the start and end of the match:  \zs \ze


 类似资料:
  • 本文向大家介绍class和普通构造函数有什么区别?相关面试题,主要包含被问及class和普通构造函数有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 构造函数可以当作普通的函数调用,而class 只能使用new 关键字调用 class 内部默认启用严格模式 class 不存在变量提示(函数提交)在定义class前使用new调用会出错 class 内部定义的方法和属性都是不可以遍历的。 cla

  • 本文向大家介绍react的路由和普通路由有什么区别?相关面试题,主要包含被问及react的路由和普通路由有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 如果不使用 React Router,组件之间的嵌套,会使URL变得复杂,为了让我们的 URL 解析变得更智能,我们需要编写很多代码来实现指定 URL 应该渲染哪一个嵌套的 UI 组件分支。 而React Router 知道如何为我们搭建嵌

  • 问题内容: 我正在遵循该指南:Spring MVC和我意识到我不知道源文件夹(src)和普通文件夹之间的区别。 我正在使用eclipse,所以差异可能仅在IDE中有用吗? 另外,我注意到java类倾向于放在src文件夹中;而其他所有文件都进入一个普通文件夹(或项目根文件夹)。 那么,源文件夹(src)的意义是什么?为什么在原始文件夹上使用源文件夹? 谢谢! 问题答案: Eclipse将源文件夹标记

  • 我正在研究一些用于开发Web应用程序的后端即服务(BaaS)解决方案,并且我经常看到Firebase将他们的数据库称为“实时数据库”,而例如Backawa没有提到短语“实时”任何地方。 我知道实时意味着数据会立即得到处理,但我认为所有数据库都会这样做?例如,如果我有一个MySQL/SQLite/PostgreSQL数据库和insert数据,我希望它能在(毫秒)秒内检索到,而且肯定是在“insert

  • 本文向大家介绍Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?相关面试题,主要包含被问及Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?时的应答技巧和注意事项,需要的朋友参考一下 Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普

  • 问题内容: 在支持哪些正则表达式方面,perl和java有什么区别? 这个问题仅针对正则表达式,并且特别排除 了 正则表达式的用法差异(即使用正则表达式的可用函数/方法)以及语言之间的语法差异,例如Java要求转义反斜杠等。 特别令人感兴趣的是Java对可变长度后向查找的部分/偶然支持。 问题答案: “与Perl 5的比较”部分列出了许多差异。例如,Java不支持条件正则表达式。为此,您需要使用一