0

誰でも次の正規表現を見つけるのを手伝ってくれませんか。「処理済み」の後の番号を一致させようとしていますが、前の行に「Backed」という文字列が含まれている場合のみです。

「(?<=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 個のファイルをバックアップしました。19,500,663,915 バイトを 10 分 27 秒で処理しました。スループット: 1780 MB/分

内容確認済み。1分41秒で13,694,118,197バイトを処理。スループット率: 7758 MB/分

16615 個のディレクトリに 77914 個のファイルがあります。19,500,663,915 バイトを 10 分 27 秒で処理しました。スループット: 1780 MB/分

内容確認済み。1分41秒で13,694,118,197バイトを処理。スループット率: 7758 MB/分

..そして、最初に出現する 13,694,118,197 のみに一致します

于 2012-05-21T13:07:30.357 に答える