【发布时间】:2016-07-25 13:39:25
【问题描述】:
希望有人能够帮助找到这个正则表达式模式: 如果我有这个要求:
1-15 20241 0/0/6205 W 1.13 1071 0 0.00 11138.15 118.100.162.102 domain.com:443 GET /file/192493511503562/ HTTP/1.1
2-15 6252 0/130/6078 W 5.50 387 0 0.0 490.28 16798.43 14.33.181.155 domain.com:443 GET /file/720658522052690/ HTTP/1.1
3-14 9649 0/157/5992 G 4.37 1807 0 0.0 296.81 13625.69 212.252.56.41 domain.com:443 GET /file/512530584447085/ HTTP/1.1
另一个示例输出(通过源代码)
0-16 1005 0/59/6014 W 2.15 648 0 0.0 114.91 10535.48 178.235.43.134 domain.com:443 GET /file/152577842120081/ HTTP/1.1 1-16 8820 0/22/6489 W 0.96 1790 0 0.0 100.79 11996.02 177.221.26.229 domain.com:443 GET /file/415757652884349/ HTTP/1.1 2-16 28288 0/35/6723 W 1.46 178 0 0.0 68.29 18010.46 89.3.212.185 domain.com:443 GET /file/687013016222044/ HTTP/1.1 3-16 10274 0/0/6736 W 0.07 2275 0 0.0 0.00 14280.77 46.176.105.15 domain.com:443 GET /file/321646937401965/ HTTP/1.1 4-16 29945 0/2/7471 W 0.02 210 0 0.0 0.01 16350.10 190.158.29.250 domain.com:443 GET /file/333674884214997/ HTTP/1.1 5-16 29245 0/2/7699 W 0.01 272 0 0.0 1.07 20284.17 49.48.250.12 domain.com:443 GET /file/781792728276923/ HTTP/1.1
之间只有一个空格。 我需要获取这些值:
20241
192493511503562
6252
720658522052690
9649
512530584447085
所以目前我的 preg_match_all 看起来像:
preg_match_all('@[0-9] (.*?) [0-9]/@si', $output, $url) ;
foreach($url[1] as $output ) { echo $output ; }
如何获得这两个值?当前的 preg_match 只回显第一个值。所以例如 20241 6252 .. 等等。我试过这个
preg_match_all('@[0-9] (.*?) [0-9]*/(.*?)/@si', $output, $url) ;
foreach($url[0] as $output ) { echo $output ; }
但仍然不是我想要的 [0] 结果。也许您的一些真正的人可以提供帮助。
编辑: 为了澄清这是 exec('/usr/local/apache/bin/apachectl fullstatus', $output); 的输出。 foreach ($output as $output) { 和代码 } .. 所以我只需要一个apache进程的PID和REQUEST
【问题讨论】:
-
您应该尝试使用类似的工具:phpliveregex.com 另外,您希望
$url[0]包含什么? -
相信我,我在我的生活 php 脚本中尝试了 1000 种变体,您提供的网址只是一个实时查看器.. 但无论如何感谢
-
这看起来像一个系统日志,可能有解析器。尽管
[0-9]只是在寻找一个号码,但要开始。+或*将允许多个数字;那些是quantifiers。 -
是的,它来自 apache 状态,但是它们是相同的或相似的,尤其是对于第一个值和第二个文件/VALUE2/ 的每个请求 -XX VALUE1 XX/XX/XX 都是相同的。 .
标签: php regex preg-match