我正在尝试在PHP中编写某种解析器:它接收包含#*test-var*#
之间变量的文本,例如:blabla# test-var #blabla
我要做的是调整此文本,使其变为:blabla <p>test-var</p> blabla
最重要的是,变量的类型可以改变,例如:blabla #*:test-var*# blabla
应该变成:blabla <div>test-var</div>
(我在这里使用了一些HTML简单标签(例如<p>
标签)来解释它,但最终这应该变成更高级的HTML)
有人有什么建议吗?
答案 0 :(得分:0)
一些简单的正则表达式会做。
$string = 'blah blah #*test-var*# blah blah';
$types = array(
array(
'/#\*(.*?)\*#/',
'<p>$1</p>'
),
array(
'/#\*:(.*?)\*#/',
'<div>$1</div>'
)
);
foreach ($types as $type) {
$string = preg_replace($type[0], $type[1], $string);
}
编辑:添加了对多个标签的支持。
答案 1 :(得分:0)
function some_kind_of_parser($input, $wrapper_tag='p', $wrapper_attributes='') {
if ($wrapper_attributes == '')
$open_tag = "<$wrapper_tag>";
else
$open_tag = "<$wrapper_tag $wrapper_attributes>";
$close_tag ="</$wrapper_tag>";
$regex = '/[^(?:#\*)]+#\*([^(#\*)]+)\*#[^(?:#\*)]+/';
return preg_replace($regex, "$open_tag$1$close_tag", $input);
}
$test = 'blah blah #*test-var*# blah blah';
echo some_kind_of_parser($test);
# => <p>test-var</p>
echo some_kind_of_parser($test, 'div', 'class="foo" id ="bar"');
# => <div class="foo" id ="bar">test-var</div>