-1

我工作的公司要求我让他们能够在 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_matchpreg_replace应该使用它。

我做到了这一点:

$string = '++modal++<p>Hello</p>++endmodal++';
$pattern = '/\+\+modal\+\+/';

preg_match($pattern, $string, $matches);

先感谢您。

编辑:为了更清楚一点,我希望用 HTML 替换 ++modal++ 和 ++endmodal++ 并保持中间位不变。

4

4 回答 4

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(). 
于 2012-12-19T10:33:50.683 回答
1

我认为您应该使用以下方法获得所需的内容:

preg_match('/\+\+modal\+\+([^\+]+)\+\+endmodal\+\+/', $string, $matches)

$matches[1] = '<p>Hello</p>
于 2012-12-19T10:24:07.870 回答
1

你正试图在这里重新发明轮子。您正在尝试在这里编写一个简单的模板系统,但是您可以使用数十种 PHP 模板工具,从SmartyTwig之类的大型复杂模板到您尝试的非常简单的模板工具来写。

我没有全部使用过,所以与其推荐一个,我会向您指出您可以尝试的模板引擎列表。快速搜索一下,您可能会发现更多信息。

如果您确实坚持自己编写,那么考虑安全性很重要。如果您要输出包含用户输入数据的任何内容,则必须确保所有输出都正确转义和清理以显示在网页上;有许多常见的黑客可以利用不安全的模板系统来完全破坏网站。

于 2012-12-19T10:38:05.697 回答
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);
?>

非常类似于这个例子

于 2012-12-19T10:47:09.077 回答