正则表达式,只匹配最后一个结果

时间:2016-01-12 13:40:18

标签: php regex

试过这个,但没有运气。匹配两个结果(参见示例)。

$lines = preg_grep("/1\.11\.\s\w*/m", $lines);

实施例

1.11 Test
1.11 Test //other paragraph

只需要找到它:

1.11 Test //other paragraph

2 个答案:

答案 0 :(得分:0)

您可以改用preg_match()。可选地,preg_match可以在数组中存储匹配的字符序列,然后您可以选择该数组的最后一个元素。

$result = null;
$matches = array();
$pattern = '/1\.11.+/';
$string = "1.11 Test
  asd 123
  1.11 Test //other paragraph
  asda";
$tmp = preg_match($pattern, $string, $matches);

if ($tmp === 1) $result = end($matches);

unset($matches, $pattern, $string, $tmp);
var_dump($result);

您的正则表达式模式也会失败,因为第二个点(\。)永远不会匹配。

答案 1 :(得分:0)

由于您的输入$lines是一个数组,并且您似乎想要获取以1.11开头且包含单词然后注释的项目,您可以使用

$lines = preg_grep('~^1\.11\s*\w+\s*//~', $lines);

请参阅IDEONE demo

<强>解释

  • ^ - 字符串开头
  • 1\.11 - 文字1.11
  • \s* - 零个或多个空白符号
  • \w+ - 一个或多个字([a-zA-Z0-9_])符号
  • \s*// - 零个或多个空白符号后跟文字字符序列//