正则表达式模式来区分这些文本

时间:2014-03-04 08:05:22

标签: php regex preg-match

我有以下文字,我想要一个正则表达式模式:

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()

4 个答案:

答案 0 :(得分:1)

这个正则表达式可能适合你:

preg_match('/^weight (\d+)/m', $input, $match);

regex101 demo

^确保weight位于该行的开头。

m标记使^在每行的开头匹配,而不是仅在字符串的开头匹配。

如果可能有其他weight你不想要哪一行可以在行的开头,你可以试试这个,这可以确保weight就在{{1}之后}}:

maximum

regex101 demo

答案 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);

DEMO

<强>输出

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
)

链接:https://eval.in/109758

答案 3 :(得分:0)

rate maximum \d+[\s\S]+?weight \d+