正则表达式查找字符串,如果它来自另一个字符串

时间:2012-05-21 12:43:59

标签: regex preg-match preg-match-all

任何人都可以帮我找到以下的正则表达式。我试图匹配“已处理”之后的数字,但仅限于前一行包含字符串“已备份”。

我一直在使用“(?< = 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*  

2 个答案:

答案 0 :(得分:0)

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

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

结果在群组num

我用以下输入测试了它:

  

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

     

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

     

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

     

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

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

答案 1 :(得分: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库不支持lookbehind中的无限重复。如果是这样,我们可以寻找替代方案