【发布时间】:2017-04-30 06:36:47
【问题描述】:
我想不出办法让正则表达式匹配停止不在行尾,而是在 VS Code 中的文件尾?是工具限制还是我不知道的某种模式?
【问题讨论】:
-
[\s\S]不工作吗? -
@WiktorStribiżew 不,首先它匹配单个字符,并且使用
*量词它在 EOL 上停止
我想不出办法让正则表达式匹配停止不在行尾,而是在 VS Code 中的文件尾?是工具限制还是我不知道的某种模式?
【问题讨论】:
[\s\S] 不工作吗?
* 量词它在 EOL 上停止
CR 似乎与[\s\S] 不匹配。将\r 添加到此字符类:
[\s\S\r]+
将匹配 任何 1+ 个字符。
证明有效的其他替代方法是 [^\r]+ 和 [\w\W]+。
如果要使任何字符类匹配换行符,无论是正字符类还是负字符类,都需要在其中添加\r。
示例:
a 和b 之间的任何文本字符:a[^ab\r]*b
START 和最接近的 STOP 单词之间的任何文本:
START[\s\S\r]*?STOPSTART[^\r]*?STOPSTART[\w\W]*?STOPSTART 和STOP 单词之间的任何文本:
START(?:(?!START)[\s\S\r])*?STOP请看下面的演示截图:
【讨论】:
\n,忘了\r
\r/\n。可以在交替或模式重写的帮助下将其添加到否定字符类中。在通用形式中,它可能看起来像(?:\r|[^pattern])*。我刚刚测试过,[^pattern\r]* 也可以工作,虽然这看起来很奇怪。
\n,会发生什么,@ 987654348@ & [^] 等开始匹配换行符。
匹配从aaa 开始并以第一个bbb 结束的多行文本块(惰性限定符)
aaa(.|\n)+?bbb
查找从aaa 开始并以最后一个bbb 结束的多行文本块。 (贪婪限定符)
aaa(.|\n)+bbb
【讨论】: