PCRE 正则表达式匹配模式直到找到下一个模式
PCRE Regex Matching Patterns until next pattern is found
我正在努力寻找这个看起来相当简单的正则表达式的解决方案。我需要匹配在另一个匹配模式之前的模式。
我需要在下面捕获 "Keberos-wsfed" 后面的 "Mean:":
Kerberos:
Historical:
Between 26 and 50 milliseconds: 10262
Between 50 and 100 milliseconds: 658
Between 101 and 200 milliseconds: 9406
Between 201 and 500 milliseconds: 6046
Between 501 milliseconds and 1 second: 1646
Between 1 and 5 seconds: 1399
Between 6 and 10 seconds: 13
Between 11 and 30 seconds: 34
Between 31 seconds and 1 minute: 7
Between 1 minute and 2 minutes: 1
Mean: 268, Mode: 36, Median: 123
Total: 29472
Kerberos-wsfed:
Historical:
Between 26 and 50 milliseconds: 3151
Between 50 and 100 milliseconds: 129
Between 101 and 200 milliseconds: 650
Between 201 and 500 milliseconds: 411
Between 501 milliseconds and 1 second: 171
Between 1 and 5 seconds: 119
Between 6 and 10 seconds: 4
Between 11 and 30 seconds: 6
Between 1 minute and 2 minutes: 1
Mean: 176, Mode: 33, Median: 37
Total: 4642
我可以匹配(?:Kerberos-wsfed:),我可以匹配Mean:但是我必须在Kerberos-wsfed之后找到Mean的值但是有困难。感谢您的协助。
使用正则表达式
Kerberos-wsfed[\s\S]*?Mean: *(\d+)
平均值包含在捕获组 1 中,即 </code> 或 <code>
,具体取决于您的编程语言。
见demo。
使用捕获组:
Kerberos-wsfed:[\s\S]*Mean:\s(\d+)
Kerberos-wsfed:
按原样匹配文字
[\s\S]*
之间允许任意数量的字符(包括行分隔符)
Mean:\s
匹配文字 Mean
后跟 space \s
- 最后
(\d+)
包裹在第一个捕获组中捕获您要查找的值。它基本上允许任意数量的数字
您要查找的值 (176
) 将在第一个捕获组中,即 </code> 或第一个基于您的语言的捕获组。例如,在 PHP:</p>
<pre><code>preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
echo $matches[0][1];
// Output: 176
尝试使用正则表达式:#Kerberos-wsfed:.+?Mean:\s+(\d+)#s
如果您确定文件格式,您可以只使用 space 或 \s
而不是 \s+
。
值 176
将位于匹配元素的第 1 组
我正在努力寻找这个看起来相当简单的正则表达式的解决方案。我需要匹配在另一个匹配模式之前的模式。
我需要在下面捕获 "Keberos-wsfed" 后面的 "Mean:":
Kerberos:
Historical:
Between 26 and 50 milliseconds: 10262
Between 50 and 100 milliseconds: 658
Between 101 and 200 milliseconds: 9406
Between 201 and 500 milliseconds: 6046
Between 501 milliseconds and 1 second: 1646
Between 1 and 5 seconds: 1399
Between 6 and 10 seconds: 13
Between 11 and 30 seconds: 34
Between 31 seconds and 1 minute: 7
Between 1 minute and 2 minutes: 1
Mean: 268, Mode: 36, Median: 123
Total: 29472
Kerberos-wsfed:
Historical:
Between 26 and 50 milliseconds: 3151
Between 50 and 100 milliseconds: 129
Between 101 and 200 milliseconds: 650
Between 201 and 500 milliseconds: 411
Between 501 milliseconds and 1 second: 171
Between 1 and 5 seconds: 119
Between 6 and 10 seconds: 4
Between 11 and 30 seconds: 6
Between 1 minute and 2 minutes: 1
Mean: 176, Mode: 33, Median: 37
Total: 4642
我可以匹配(?:Kerberos-wsfed:),我可以匹配Mean:但是我必须在Kerberos-wsfed之后找到Mean的值但是有困难。感谢您的协助。
使用正则表达式
Kerberos-wsfed[\s\S]*?Mean: *(\d+)
平均值包含在捕获组 1 中,即 </code> 或 <code>
,具体取决于您的编程语言。
见demo。
使用捕获组:
Kerberos-wsfed:[\s\S]*Mean:\s(\d+)
Kerberos-wsfed:
按原样匹配文字[\s\S]*
之间允许任意数量的字符(包括行分隔符)Mean:\s
匹配文字Mean
后跟 space\s
- 最后
(\d+)
包裹在第一个捕获组中捕获您要查找的值。它基本上允许任意数量的数字
您要查找的值 (176
) 将在第一个捕获组中,即 </code> 或第一个基于您的语言的捕获组。例如,在 PHP:</p>
<pre><code>preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
echo $matches[0][1];
// Output: 176
尝试使用正则表达式:#Kerberos-wsfed:.+?Mean:\s+(\d+)#s
如果您确定文件格式,您可以只使用 space 或 \s
而不是 \s+
。
值 176
将位于匹配元素的第 1 组