我无法找到一种方法来让正则表达式匹配停止在文件的末尾而不是行的末尾,在VS Code中如此?这是工具限制还是有一些我不知道的模式?
我无法找到一种方法来让正则表达式匹配停止在文件的末尾而不是行的末尾,在VS Code中如此?这是工具限制还是有一些我不知道的模式?
看起来CR与[\s\S]
不匹配。在这个字符类中添加\r
:
[\s\S\r]+
将匹配任何1个或多个字符。
其他经过验证的可行替代方法为[^\r]+
和[\w\W]+
。
如果您想使任何字符类匹配换行符,无论是正字符类还是负字符类,都需要在其中添加\r
。
示例:
a
和b
字符之间的任何文本:a[^ab\r]*b
START
和最接近的STOP
单词之间的任何文本:
START[\s\S\r]*?STOP
START[^\r]*?STOP
START[\w\W]*?STOP
START
和STOP
单词之间的任何文本:
START(?:(?!START)[\s\S\r])*?STOP
请参见下面的演示截图:
\n
,忘记了 \r
。 - Dima Ogurtsov\r
/\n
匹配。将其添加到否定字符类中可以借助于交替或模式重写来完成。在通用形式中,它可能看起来像(?:\r|[^pattern])*
。我刚刚测试了一下,[^pattern\r]*
也可以工作,尽管这看起来很奇怪。 - Wiktor Stribiżew\n
,那么*
和[^]
等就开始匹配换行符。 - Michael Johnstonaaa
开始并以第一个bbb
结束的多行文本块(懒惰限定符)。aaa(.|\n)+?bbb
从aaa
开始,直到最后一个bbb
,查找多行文本块。(贪婪限定符)
aaa(.|\n)+bbb
如果您想从“中间”文本中排除某些字符,也可以这样做。这只会找到在“aaa”和“bbb”之间没有出现字符“c”的块:
aaa([^c]|\n)+?bbb
<!--[^[if](.|\n)+?-->
[\s\S]
不起作用吗? - Wiktor Stribiżew*
量词时会停在行尾。 - Dima Ogurtsov