我知道"\v"在正则表达式中表示垂直制表符或空白字符(LF、CR等),因此我使用[^\v]代替[\V]来表示任何非垂直空白字符。但是我发现在notepad++ 7.5中[^\v]无法正常工作。
示例文本来源(ffmpeg日志):
我希望能够捕获ffmpeg进程的最新速度值,因此我使用了如下的正则表达式。
在Notepad++中返回的捕获值为:
但是,regex101.com的结果是“2.91”,这是我期望的值。 因此,我尝试使用 [\V],如下所示:
示例文本来源(ffmpeg日志):
frame=13920 fps= 86 q=-1.0 size= 96512kB time=00:07:44.47 bitrate=1702.2kbits/s speed=2.88x
frame=14068 fps= 87 q=-1.0 size= 98048kB time=00:07:49.41 bitrate=1711.1kbits/s speed= 2.9x
frame=14116 fps= 87 q=-1.0 Lsize= 98954kB time=00:07:51.06 bitrate=1720.9kbits/s speed=2.91x
video:86252kB audio:3826kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9.852874%
我希望能够捕获ffmpeg进程的最新速度值,因此我使用了如下的正则表达式。
(?s).*speed=\s*\K([^\v]*)(?=x.*$)
在Notepad++中返回的捕获值为:
2.91x
video:86252kB audio:3826kB subtitle:0kB other streams:0kB global headers:0kB mu
但是,regex101.com的结果是“2.91”,这是我期望的值。 因此,我尝试使用 [\V],如下所示:
(?s).*speed=\s*\K([\V]*)(?=x.*$)
然后,它们都返回了我期望的相同的捕获值"2.91"。 regex101的结果
因此,我想知道[\V]、[^\v]之间的区别,以及为什么Notepad++的匹配结果如此不同。谢谢:-)
\w
和\W
通常被支持,它们不是单个字符,而是代表许多字符,就像\s
和\S
一样,但我不确定\v
是否也是这样工作的。我期望[\V]
等同于[V]
。 - tadman\v
代表“垂直制表符”或ASCII 11。这与回车(ASCII 13)或换行(ASCII 10)不同。 - tadman[^\v]
似乎被解析为“非垂直空格”,但Boost以另一种方式解析字符类中的\v
作为VT符号\x0B
,[^\v]
匹配除VT之外的任何字符。在大多数情况下,请使用[^\r\n]
作为解决方法。 - Wiktor Stribiżew