我认为这是一个非常愚蠢的问题,但我没有发现我的错误在哪里...
我有这个示例字符串:
...
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
谢谢!
答案 0 :(得分:1)
这是一种简单的方法,它首先在foo
和faa
标记之间隔离所需的文本。然后,它使用带有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
)