Questions tagged «regular-expression»

正则表达式(通常简称为“ regex”)是以声明性语言编写的表达式,用于匹配字符串中的模式。

3
使用正则表达式查找和替换
我有一个带有一堆用户默认值的文件。我想更改一些文本,但是我在努力寻找匹配器和替换器。使用以下示例: ############################################################################### # Trackpad, mouse, keyboard, Bluetooth accessories, and input # ############################################################################### # Trackpad: enable tap to click for this user and for the login screen defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true 我想替换# Trackpad: ...为running "Trackpad: ..." 解决问题的方法是,我使用正则表达式测试器提出了一些建议: /\n\n#\s(.*)/g 如果我尝试在Vim中使用它,则对我不起作用: :/\n\n#\s(.*)/running "\1"/g 我想我的问题可以归结为两个具体问题: 如何避免搜索\n字符,而是确保#没有出现在搜索组的末尾? 如何有效使用捕获组? 以下是一些很好的答案。很难在这三者之间进行选择,但是我认为所选答案对于我的原始规格而言是最准确的。我建议您尝试使用实际文件中的所有三个答案,以查看您对它们的感觉。


3
如何使正则表达式匹配器不贪心?
我正在尝试使用正则表达式替换文件中的文本(仅使用protocol / domain /替换完整的url): :%s/\(https\?:\/\/.*?\/\).*/\1/gc 不幸的.*?是不匹配字符串,甚至试图转义?量词?非贪婪量词如何在Vim中转义?

1
我可以在Vim中搜索Unicode组合字符吗?
我有一个带有字符的文件ã(小写的+组合波浪号)。 Encoding并且fileencoding都是utf-8。 ga表演 <a> 97, hex 61, octal 141 <~> 771, Hex 0303, Octal 1403 (但带有中的实际组合代字号<>),并g8显示 61 + cc 83 搜索/a\%u0303效果很好。 搜索只是\%u0303给出E486模式未找到。 我可以只搜索组合字符而不搜索基本字符吗?

5
Vim语法模式突出显示python关键字参数
我正在努力学习vim正则表达式(我也不太了解其他正则表达式),所以主要问题是定义匹配的正则表达式 some_function_call(simple_value, keyword=value) 此示例中的关键字。 因此,如果它在括号内并且后跟等号,则应该匹配一个单词。 下一个问题是如何在vim中定义语法文件。我很乐意为此提供帮助,但是学习起来应该不难,所以我可以自己做。 根据答案进行编辑我已经为python编写了自己的语法脚本。随时尝试。 在此处输入链接说明

1
为什么Vim正则表达式不允许超过9个捕获组?
从中:h E65我们可以看到,Vim在替换命令中不允许超过9个捕获组。 例如,以下命令将起作用: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1 但是,这个带有一个捕获组的捕获组将失败: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1 我的问题不是关于为什么失败(这是Vim的硬限制),而是关于为什么Vim根本没有这个限制? 另外,我知道具有超过9个捕获组的真实正则表达式可能很难阅读和维护,但我仍然很好奇。

1
Vim的正则表达式魔术与著名的正则表达式类兼容吗?
许多Unix工具的正则表达式语法通常是POSIX编码的基本正则表达式和扩展正则表达式(分别是BRE和ERE),在某些现代实现中,是Perl样式(PCRE是这种实现)。 Vim的魔术等级与此类外部定义但众所周知的类之间是否存在一对一的对应关系?看起来\m是BRE,\v是ERE,但POSIX不包含环视。 如果存在这种对应关系,是否在某处定义?pattern.txt只提了一则POSIX。 还是我们必须坚持用“魔术”来描述Vim正则表达式?



1
有没有办法将Vim regex文字转换为不同的魔术模式?
如果我在字符串文字中有一个神奇的Vim正则表达式,是否可以将整个正则表达式转换为使用不同魔术模式的替代表示形式,因此可以将该等效正则表达式粘贴到源代码中? 例如,如果我要转换此魔术模式,请执行以下操作: '\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>' 变成非常魔幻的模式,使其更具可读性,例如: '\v-=<\d+L=>|0[xX][0-9a-fA-F]+>' 我经常犯错误,尝试手动将其转换。

4
\ r和\ n在s命令中表示不同含义的原理是什么?
我们都知道,在搜索时\n是换行符,并且\r是回车符(^M),但是当替换\r是换行符时\n则是空字节(^@)。 这种不对称的根源是什么?鉴于这种行为是……至少可以说是怪异的(当您第一次出错时,它适得其反)我希望这是有一些奇怪的历史原因。 (顺便说一下,是否有某种方法可以“修复”此行为并获得更直观的效果?)

1
按正则表达式搜索模式折叠
我得到了一个纯文本文件,其中用空格分隔值的列。像这样: AU 3030 .... ... .... AU 3031 .... ... .... AU 3032 .... ... .... AU 3033 .... ... .... IT 48100 ... .. ..... IT 40100 ... .. ..... IT 48123 ... .. ..... UK 3333 ... ... ..... UK 4444 ... ... ..... UK 5555 ... ... …

1
删除匹配行之前和之后的n行范围?
我有一个重复的配置文件,我想匹配一个正则表达式,并在匹配之前和之后删除一系列行。我也想在一个命令中删除匹配项。 我可以用... :g/match/-1d ...多次从比赛前删除多行... ...并将其与以下几个呼叫组合... :g/match/+1d ...在比赛结束后删除多行... 但是,有没有办法删除一条命令匹配之前,之后和包括的行范围?


3
Vim正则表达式中的'\ zs'和'\ @ <='原子有什么区别?
这是我从文档中得到的结果:\zs匹配前面的正则表达式后\@&lt;=“启动突出显示的部分”,而匹配前面的原子后“启动突出显示的部分” 。但是我不完全理解这一点的微妙之处,所以谁能解释他们在深度上有何不同? 这就是让我感到好奇的原因:如果我跑步 /\_s\zsnnoremap 即选择nnoremap由空格或一个开始的行之前(即,从前述线路换行,因此\_之前的s),然后运行gn到进入的视觉模式和直观地选择下一个匹配,由于某种原因,仅在第一列(即第一n中nnoremap)选择-尽管事实上,整个nnoremap字凸显与:hlsearch开启。 但是,如果我改为运行搜索 /\_s\@&lt;=nnoremap 然后尝试gn,nnoremap正确选择了整个。这可能是怎么回事?我(敢说)发现了一些晦涩的错误吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.