我有以下文字,我想要一个正则表达式模式:
qos policy 1024SharedUnlimitedUserRX pwfq
rate maximum 1792
weight 16
num-queues 4
queue-map Fastweb
congestion-map Fastweb
queue 0 priority 0 weight 100
queue 1 priority 1 weight 90
queue 2 priority 2 weight 70
queue 3 priority 3 weight 85
模式应该在第一个weight
短语之后获取整数值。换句话说,我想要16值,但不是接下来的4行(100,90,70,85)的值。
我写了这个模式:
/weight (\d*)/
但是这种模式也找到了其他线的价值,我该怎么办?
注意:我使用的是preg_math()
函数,而不是preg_match_all()
答案 0 :(得分:1)
这个正则表达式可能适合你:
preg_match('/^weight (\d+)/m', $input, $match);
^
确保weight
位于该行的开头。
m
标记使^
在每行的开头匹配,而不是仅在字符串的开头匹配。
如果可能有其他weight
你不想要哪一行可以在行的开头,你可以试试这个,这可以确保weight
就在{{1}之后}}:
maximum
答案 1 :(得分:0)
这样做
<?php
$input_line="qos policy 1024SharedUnlimitedUserRX pwfq
rate maximum 1792
weight 16
num-queues 4
queue-map Fastweb
congestion-map Fastweb
queue 0 priority 0 weight 100
queue 1 priority 1 weight 90
queue 2 priority 2 weight 70
queue 3 priority 3 weight 85";
preg_match("/(?:weight\s(\d+)(?!\S+))/", $input_line, $output_array);
print_r($output_array);
<强>输出强>
Array
(
[0] => weight 16
[1] => 16
)
答案 2 :(得分:0)
您可以使用此正则表达式
(?<=weight )\d+
检查http://regex101.com/r/eP2yS2
处的正则表达式<?php
$input_line="qos policy 1024SharedUnlimitedUserRX pwfq
rate maximum 1792
weight 16
num-queues 4
queue-map Fastweb
congestion-map Fastweb
queue 0 priority 0 weight 100
queue 1 priority 1 weight 90
queue 2 priority 2 weight 70
queue 3 priority 3 weight 85";
preg_match("/(?<=weight )\d+/", $input_line, $output_array);
print_r($output_array);
?>
<强>输出强>
Array
(
[0] => 16
)
答案 3 :(得分:0)
rate maximum \d+[\s\S]+?weight \d+