我正在使用preg_match()
从变量中提取文本片段,让我们说变量看起来像这样:
[htmlcode]This is supposed to be displayed[/htmlcode]
middle text
[htmlcode]This is also supposed to be displayed[/htmlcode]
我想提取[htmlcode]
的内容并将它们输入到数组中。我这样做是通过使用preg_match()
。
preg_match('/\[htmlcode\]([^\"]*)\[\/htmlcode\]/ms', $text, $matches);
foreach($matches as $value){
return $value . "<br />";
}
以上代码输出
[htmlcode]This is supposed to be displayed[/htmlcode]middle text[htmlcode]This is also supposed to be displayed[/htmlcode]
而不是
如果已经完全没有想法
答案 0 :(得分:4)
已经解释过; *
模式很贪婪。另一件事是使用preg_match_all()
函数。它会返回一个匹配内容的多维数组。
preg_match_all('#\[htmlcode\]([^\"]*?)\[/htmlcode\]#ms', $text, $matches);
foreach( $matches[1] as $value ) {
答案 1 :(得分:3)
*
石斑鱼是贪婪的,即它会吃掉所有东西,直到最后 [/htmlcode]
。尝试用非贪婪的*
替换*?
。
答案 2 :(得分:2)
*
默认为贪婪,([^\"]*?)
(注意添加的?
)应该让它变得懒惰。
答案 3 :(得分:2)
看看这段代码:
preg_match('/\[htmlcode\]([^\"]*)\[\/htmlcode\]/ms', $text, $matches);
foreach($matches as $value){
return $value . "<br />";
}
现在,如果您的模式工作正常并且一切正常,您应该知道:
return
语句将中断所有循环并退出该函数。$text
所以,你所做的是返回第一个大字符串并退出函数。
我建议您检查所需的结果:
$matches[1]
和$matches[2]