任何人都可以帮我找到以下的正则表达式。我试图匹配“已处理”之后的数字,但仅限于前一行包含字符串“已备份”。
我一直在使用“(?< = 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*
答案 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中的无限重复。如果是这样,我们可以寻找替代方案