preg_match为一位数字,两边都有空格

时间:2017-09-29 13:30:17

标签: php regex

我需要使用preg_match或preg_split输出下面数组中的单个3,我该如何实现?这种可能性是1到8。

VMName Count CompatibilityForMigrationEnabled CompatibilityForOlderOperatingSystemsEnabled ------ ----- -------------------------------- -------------------------------------------- ap-1-38 3 False False

我使用preg_match和preg_split都尝试了以下内容但没有成功:

('\\s+\\d\\s+', $output)
('\\s+[\\d]\\s+', $output)
("^[\s0-9\s]+$", $output)
("/(.*), (.*)/", $output)

3 个答案:

答案 0 :(得分:1)

尝试下面的preg_match

<?php

$matched = preg_match('/( [0-9] )/', $string, $matches);
if($matched){
    print_r($matches);
}

希望这有帮助!

答案 1 :(得分:1)

试试这个:

preg_match("/( \d{1} )/", $input_line, $output_array);

示例:http://www.phpliveregex.com/p/luf

答案 2 :(得分:0)

要匹配空格之间的18号码,您可以使用

preg_match('~(?<!\S)[1-8](?!\S)~', $s, $match)

请参阅regex demo

<强>详情

  • (?<!\S) - 当前位置左侧立即需要的空格或字符串开头
  • [1-8] - 从18
  • 的数字
  • (?!\S) - 紧靠当前位置右侧需要的空格或字符串结尾

请参阅PHP demo

$str = 'VMName Count CompatibilityForMigrationEnabled CompatibilityForOlderOperatingSystemsEnabled ------ ----- -------------------------------- -------------------------------------------- ap-1-38 3 False False';
if (preg_match('/(?<!\S)[1-8](?!\S)/', $str, $match)) {
    echo $match[0];
}
// => 3

注意您也可以使用捕获方法:

if (preg_match('/(?:^|\s)([1-8])(?:$|\s)/', $str, $match)) {
    echo $match[1];
}

请参阅regex demoPHP demo

此处,(?:^|\s)是一个非捕获交替组,匹配字符串*(^)或(|)空格(\s)的开头,然后是数字从18被捕获(使用([1-8])),然后(?:$|\s)匹配字符串结尾($)或空格。 $match[1]保留必要的输出。