0

谁能帮我找到以下的正则表达式。我试图匹配“已处理”之后的数字,但前提是前一行包含字符串“支持”。

我一直在使用 "(?<=Processed )(.*?)(?= bytes)" 来获取号码,但我想使用 preg-match-all 并且只匹配备份的号码,而不是验证的号码……

这是一个示例字符串:

Backed up 77914 files in 16615 directories.  
Processed 19,500,663,915 bytes in  10 minutes and  27 seconds.  
Throughput rate: 1780 MB/min*  

Contents verified.  
Processed 13,694,118,197 bytes in  1 minute and  41 seconds.  
Throughput rate: 7758 MB/min*  
4

2 回答 2

0

试试这个

(?<=.*Backed.*)[\d,]+(?= bytes)

给定输入

Backed up 77914 files in 16615 directories. Processed 19,500,663,915 bytes in 10 minutes and 27 seconds. Throughput rate: 1780 MB/min
Contents verified. Processed 13,694,118,197 bytes in 1 minute and 41 seconds. Throughput rate: 7758 MB/min
Backed up 77914 files in 16615 directories. Processed 19,500,663,915 bytes in 10 minutes and 27 seconds. Throughput rate: 1780 MB/min
Contents verified. Processed 13,694,118,197 bytes in 1 minute and 41 seconds. Throughput rate: 7758 MB/min

它会匹配

19,500,663,915
19,500,663,915

可能是 PCRE 库不支持后向无限重复。如果是这样,我们可以寻找替代方案

于 2012-05-21T13:24:21.487 回答
0

这是根据您的要求我能得到的最接近的:

(?<=Backed)[^\n]+[\n\r]+.*Processed\s(?<num>(\d+\,*)+)\sbytes

结果在组中num

我已经使用以下输入对其进行了测试:

在 16615 个目录中备份了 77914 个文件。在 10 分 27 秒内处理了 19,500,663,915 个字节。吞吐率:1780 MB/分钟

内容已核实。在 1 分 41 秒内处理了 13,694,118,197 个字节。吞吐率:7758 MB/分钟

16615 个目录中的 77914 个文件。在 10 分 27 秒内处理了 19,500,663,915 个字节。吞吐率:1780 MB/分钟

内容已核实。在 1 分 41 秒内处理了 13,694,118,197 个字节。吞吐率:7758 MB/分钟

..它只匹配第一次出现的 13,694,118,197

于 2012-05-21T13:07:30.357 回答