如何在 PHP 中使用预匹配获取两个常量之间的字符串

How to get string between two constants using preg match in PHP

$content = 'blah [faq] blag blag blag [/faq] blah';

preg_match("%\[faq\].*\[/faq\]%i", $content, $matches);

print_r($matches);

我知道我的正则表达式在这里有问题,因为它不起作用。我想要 matches[0] 到 return blag blag blag.

你的问题可以用这个解决。

$content = 'blah [faq] blag blag blag [/faq] blah';

preg_match("%\[faq\](.*?)\[/faq\]%i", $content, $matches);

print_r($matches[1]);

我们再添加一个匹配项并获得索引 1。索引 0 是完全匹配模式,索引 1 是 (.*?) 中问号的第二个匹配项

你的代码基本上是正确的,除了你应该提供一个捕获组来捕获标签之间的内容。然后,访问 $matches[1] 中捕获的内容,而不是 $matches[0],后者将包含整个匹配项。

\[faq\](.*?)\[/faq\]

更新脚本:

$content = 'blah [faq] blag blag blag [/faq] blah';
preg_match("/\[faq\](.*?)\[\/faq\]/", $content, $matches);
echo $matches[1];

这会打印:

blag blag blag

注意:我将分隔符从 % 切换为 /,这更典型。