【问题标题】:Multi-line regular expressions in Visual Studio CodeVisual Studio Code 中的多行正则表达式
【发布时间】:2017-04-30 06:36:47
【问题描述】:

我想不出办法让正则表达式匹配停止不在行尾,而是在 VS Code 中的文件尾?是工具限制还是我不知道的某种模式?

【问题讨论】:

  • [\s\S] 不工作吗?
  • @WiktorStribiżew 不,首先它匹配单个字符,并且使用 * 量词它在 EOL 上停止

标签: regex visual-studio-code


【解决方案1】:

CR 似乎与[\s\S] 不匹配。将\r 添加到此字符类:

[\s\S\r]+

将匹配 任何 1+ 个字符。

证明有效的其他替代方法是 [^\r]+[\w\W]+

如果要使任何字符类匹配换行符,无论是正字符类还是负字符类,都需要在其中添加\r

示例

  • 两个最接近的ab 之间的任何文本字符:a[^ab\r]*b
  • START 和最接近的 STOP 单词之间的任何文本:
    • START[\s\S\r]*?STOP
    • START[^\r]*?STOP
    • START[\w\W]*?STOP
  • 最接近的STARTSTOP 单词之间的任何文本:
    • START(?:(?!START)[\s\S\r])*?STOP

请看下面的演示截图:

【讨论】:

  • 是的,这行得通,谢谢。试过\n,忘了\r
  • @AymericBouzyaybbyk 是的,我试图让这个答案保持最新,您可以查看answer revision history。它有一段时间没有工作,但开发人员修复了他们之前引入的错误。
  • 如何做一个多行否定字符类?
  • @MichaelJohnston 换行符匹配\r/\n。可以在交替或模式重写的帮助下将其添加到否定字符类中。在通用形式中,它可能看起来像(?:\r|[^pattern])*。我刚刚测试过,[^pattern\r]* 也可以工作,虽然这看起来很奇怪。
  • @WiktorStribiżew 它看起来确实很奇怪,还有一些其他奇怪的事情......我认为如果你在正则表达式的任何地方使用\n,会发生什么,@ 987654348@ & [^] 等开始匹配换行符。
【解决方案2】:

匹配从aaa 开始并以第一个bbb 结束的多行文本块(惰性限定符)

aaa(.|\n)+?bbb

查找从aaa 开始并以最后一个bbb 结束的多行文本块。 (贪婪限定符)

aaa(.|\n)+bbb

【讨论】:

  • 这很有帮助。简单易行。管道字符节省了一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多