具有可变内容的正则表达式

时间:2010-12-09 21:55:49

标签: php regex

我正在尝试在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)

有人有什么建议吗?

2 个答案:

答案 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>