如何在[LOOP] ... [/ LOOP]之间获取字符串 我试试这个但不行吗
$gloop = preg_replace('/\[LOOP\]([^\[]*)\[\/LOOP\]/', '\\1', $var);
... 字符串:
'<tr>
[LOOP]<th scope="col">%Gdata_All%</th>[/LOOP]
</tr>'
但我会在[LOOP]中串起来...... [/ LOOP]
答案 0 :(得分:9)
我首先要说的是,您是否正在创建自己的模板库?有一些成熟的,如Smarty,应该能够满足你的要求。杰夫阿特伍德的这篇文章也很好读:“Don't Reinvent The Wheel, Unless You Plan on Learning More About Wheels”
如果您想推出自己的解决方案,那么这很好,这里有一些建议。
此方法依赖于使用PHP安装BBCode扩展,它是本机的,不依赖于正则表达式引擎(慢)。这个解决方案可能是最快的。
您可以让BBCode解析器转换
[LOOP]<td><?php print $row->title; ?></td>[/LOOP]
到
<?php foreach($result as $row): ?><td><?php print $row->title; ?></td><?php endforeach; ?>
查看BBCode参数,了解如何将变量传递到[LOOP]语法中。
您可以在bbcode_create方法页面上查看更多示例。
它们有点慢,但默认情况下在所有PHP安装上都启用。
为这个正则表达而去Gumbo的积分(你应该投票给他)。
/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/
然后您可以按如下方式使用它。
if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
# Successful match
# You can access the content using $result[1];
} else {
# Match attempt failed
}
-Mathew
答案 1 :(得分:1)
我会使用这个正则表达式:
/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/
它匹配[
([^[]+
)或[
以外的任何字符序列,后面没有/LOOP]
\[(?!\/LOOP])
,{ {1}} (?!
expr
是)
和[LOOP]
之间的负面预测断言;周围的[/LOOP]
(?:
expr
是一个非捕获分组。
但如果您使用真正的解析器来检测已经指出的The Pixel Developer格式错误的代码,那肯定会更好。