gpt4 book ai didi

php - 如何使用 preg_match_all 从字符串中检索三个参数?

转载 作者:可可西里 更新时间:2023-11-01 01:11:29 24 4
gpt4 key购买 nike

我试图从文本中获取所有出现的代码片段和 3 个参数。我使用 正则表达式preg_match_all PHP 函数来执行此操作。

如果我在文本中只出现一次该片段,则效果很好。如果有两个或更多,我会得到一个奇怪的结果。

我不是很擅长正则表达式,所以我很难理解我错过了什么。

函数

public function getGallerySnippetOccurrences($text) {

$ptn = '/{# +gallery +(src|width|height)=\[(.*)\] +(src|width|height)=\[(.*)\] +(src|width|height)=\[(.*)\] +#}/';

if(preg_match_all($ptn,$text,$matches)){
$turnedMatches = $this->turn_array($matches);
return $turnedMatches;
}
else {
return null;
}
}

文本 1(在这种情况下按方面工作)

Lorem ipsum {# gallery src=[holiday_images/london] width=[400] height=[300] #} sid amet.

返回:

array(1) {
[0] =>
array(7) {
[0] =>
string(66) "{# gallery src=[holiday_images/london] width=[400] height=[300] #}"
[1] =>
string(3) "src"
[2] =>
string(21) "holiday_images/london"
[3] =>
string(5) "width"
[4] =>
string(3) "400"
[5] =>
string(6) "height"
[6] =>
string(3) "300"
}
}

文本 2(意外行为)

Lorem ipsum {# gallery src=[holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris] width=[400] height=[300] #}

返回

array(1) {
[0] =>
array(7) {
[0] =>
string(141) "{# gallery src=[holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris] width=[400] height=[300] #}"
[1] =>
string(3) "src"
[2] =>
string(96) "holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris"
[3] =>
string(5) "width"
[4] =>
string(3) "400"
[5] =>
string(6) "height"
[6] =>
string(3) "300"
}
}

我做错了什么?

最佳答案

在您的模式中,您正在使用使用 (.) 的贪婪匹配,它应该被替换为非贪婪模式 (.?)。请在下面找到模式

$ptn = '/{# +gallery +(src|width|height)=\[(.*?)\] +(src|width|height)=\[(.*?)\] +(src|width|height)=\[(.*?)\] +#}/';

关于php - 如何使用 preg_match_all 从字符串中检索三个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com