正则表达式,匹配所有方括号之间的所有字符,仅匹配最后一次出现

时间:2018-09-19 16:39:23

标签: regex

我认为这是一个非常愚蠢的问题,但我没有发现我的错误在哪里...

我有这个示例字符串:

...

foo

[test1]
test2
test3
[test4]

faa

[test5]
test6
test7
[test8]
[test9]
test10    

fii

...

我想获取'foo'和'faa'字符串之间的所有字符串,因此预期结果必须为'test1'和'test4'

我使用此正则表达式模式/foo.*\[(.*?)\].*faa/sm,但仅获得“ test4”而不是“ test1”和“ test4”。我不明白为什么:/

在此为实时示例:https://regex101.com/r/KDPIEI/9

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种简单的方法,它首先在foofaa标记之间隔离所需的文本。然后,它使用带有preg_match_all的简单模式:

$input = "[blah]\nfoo\n\n[test1]\ntest2\ntest3\n[test4]\n\nfaa\n[blah]";
if (preg_match("/(?<=\bfoo\b).*(?=\bfaa\b)/s", $input, $match)) {
    preg_match_all ("/\[(.*?)\]/", $match[0], $matches);
    print_r($matches[1]);
}

Array
(
    [0] => test1
    [1] => test4
)

Demo