我工作的公司要求我让他们能够在CMS的网页上放置一个模态框,但不想输入HTML。因为我不能为我的生活理解正则表达式我无法得到它。
他们应该输入的代码的布局是:
++modal++
Some paragraph text.
Another paragraph.
++endmodal++
这些段落已经通过降价转换为<p>paragraph</p>
。
所以匹配必须是++modal++ any number of A-Za-z0-9any symbol excluding + ++endmodal++
然后用HTML替换。
我不确定应该使用preg_match
还是preg_replace
。
我到目前为止:
$string = '++modal++<p>Hello</p>++endmodal++';
$pattern = '/\+\+modal\+\+/';
preg_match($pattern, $string, $matches);
提前谢谢。
编辑:A要更清楚一点,我希望用HTML替换++模态++和++ endmodal ++,并保留中间位。
答案 0 :(得分:2)
我真的认为你不需要这里的RegEx,因为你的分隔符始终保持不变并始终位于字符串的相同位置。正则表达式在资源上也很昂贵,作为第三个反驳论据,你说你不适合它们 那么为什么不使用简单的替换或字符串修剪呢?
$search = array('++modal++', '++endmodal++');
$replacement = array('<tag>', '</tag>');
$str = '++modal++<p>Hello</p>++endmodal++';
$result = str_replace($search, $replacement, $str);
当然,'<tag>'
和'</tag>'
只是替换的示例占位符。
str_replace()手册就是这样说的:
If you don't need fancy replacing rules (like regular expressions),
you should always use this function instead of preg_replace().
答案 1 :(得分:1)
我认为您应该使用以下方式获取所需内容:
preg_match('/\+\+modal\+\+([^\+]+)\+\+endmodal\+\+/', $string, $matches)
$matches[1] = '<p>Hello</p>
答案 2 :(得分:1)
你正试图在这里重新发明轮子。你在这里尝试编写一个简单的模板系统,但是你可以使用许多PHP的模板工具,从大而复杂的Smarty和Twig到非常简单的模板系统。比你想写的要多得多。
我没有全部使用它们,所以我建议使用a list of template engines you could try而不是推荐它。你可能会通过谷歌搜索来找到更多。
如果您坚持自己编写,那么考虑安全性非常重要。如果您输出的内容包含用户输入的数据,则必须确保所有输出都已正确转义并清理,以便在网页上显示;有许多常见的黑客可以利用不安全的模板系统来完全破坏网站。
答案 3 :(得分:1)
<?php
$string = '++modal++<p>Hello</p>++endmodal++';
$patterns = array();
$patterns[0] = "/\+\+modal\+\+/"; // put '\' just before +
$patterns[1] = "/\+\+endmodal\+\+/";
$replacements = array();
$replacements[1] = '<html>';
$replacements[0] = '</html>';
echo preg_replace($patterns, $replacements, $string);
?>
与this example非常相似