Regex PCRE正则表达式匹配模式,直到找到下一个模式

Regex PCRE正则表达式匹配模式,直到找到下一个模式,regex,pcre,Regex,Pcre,我正在努力找到一个解决这个正则表达式的方法,它看起来相当简单。我需要在另一个匹配模式之前匹配一个模式 我需要抓住“Keberos wsfed”后面的“意思:”如下: Kerberos: Historical: Between 26 and 50 milliseconds: 10262 Between 50 and 100 milliseconds: 658 Between 101 and 200 milliseconds: 9406 Between 201 and 5

我正在努力找到一个解决这个正则表达式的方法,它看起来相当简单。我需要在另一个匹配模式之前匹配一个模式

我需要抓住“Keberos wsfed”后面的“意思:”如下:

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中,即
$1
\1
,具体取决于您的编程语言

请参阅。

使用正则表达式

Kerberos-wsfed[\s\S]*?Mean: *(\d+)
平均值包含在捕获组1中,即
$1
\1
,具体取决于您的编程语言

请参阅。

使用捕获组:

Kerberos-wsfed:[\s\S]*Mean:\s(\d+)
  • Kerberos wsfed:
    按原样匹配文本
  • [\s\s]*
    允许两个字符之间的任意字符数(包括行定界符)
  • Mean:\s
    匹配文本
    Mean
    ,后跟空格
    \s
  • 最后,包装在第一个捕获组中的
    (\d+)
    捕获您要查找的值。它基本上允许任意数量的数字

您要查找的值(
176
)将位于第一个捕获组中,该组为
$1
,或者是基于您的语言的第一个捕获组。例如,在PHP中:

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

echo $matches[0][1];
// Output: 176
使用捕获组:

Kerberos-wsfed:[\s\S]*Mean:\s(\d+)
  • Kerberos wsfed:
    按原样匹配文本
  • [\s\s]*
    允许两个字符之间的任意字符数(包括行定界符)
  • Mean:\s
    匹配文本
    Mean
    ,后跟空格
    \s
  • 最后,包装在第一个捕获组中的
    (\d+)
    捕获您要查找的值。它基本上允许任意数量的数字

您要查找的值(
176
)将位于第一个捕获组中,该组为
$1
,或者是基于您的语言的第一个捕获组。例如,在PHP中:

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

echo $matches[0][1];
// Output: 176

尝试使用常规表达式:
#Kerberos wsfed:.+?平均值:\s+(\d+)#s

如果您是舒尔的文件格式,则可以使用空格或
\s
代替
\s+

176
将位于匹配元素的第1组


演示:

尝试使用常规表达式:
\Kerberos wsfed:。+?意思是:\s+(\d+)\s

如果您是舒尔的文件格式,则可以使用空格或
\s
代替
\s+

176
将位于匹配元素的第1组


演示:

您应该指定此正则表达式仅在“单行”模式下工作。您应该指定此正则表达式仅在“单行”模式下工作。魂器,完全按照我的需要工作。谢谢你把它们放在一起@小姐,请别忘了选择最佳答案。
[\s\s]*?
是一种你会在JavaScript中使用的黑客,因为它不支持
s
标志,你不必在PCRE中使用它。如果不能将
s
应用于整个模式,只需使用
(?s:.*)
即可。魂器,完全按照我的需要工作。谢谢你把它们放在一起@小姐,请别忘了选择最佳答案。
[\s\s]*?
是一种你会在JavaScript中使用的黑客,因为它不支持
s
标志,你不必在PCRE中使用它。如果不能将
s
应用于整个模式,只需使用
(?s:.*)