PHP 正则表达式文本语法分析器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 正则表达式文本语法分析器相关的知识,希望对你有一定的参考价值。
<?php
class Parser
{
public $func_expr = '!\[#(.+?)(?:\s(.+?))?\]!s';
public $args_expr = '!(\S+)\s*=\s*([\'"]?)([^\2]+?)\2!s';
public function __construct($text, $cbclass)
{
$this->_text = $text;
$this->_cbclass = $cbclass;
}
public function func_expr($expr = NULL)
{
return empty($expr) ? $this->func_expr : $this->func_expr = $expr;
}
public function args_expr($expr = NULL)
{
return empty($expr) ? $this->args_expr : $this->args_expr = $expr;
}
public function do_parse()
{
return preg_replace_callback($this->func_expr, array($this, 'do_parse_func'), $this->_text);
}
private function do_parse_func($m)
{
list(, $func, $args) = $m;
$args = $this->do_parse_args($args);
return call_user_func($this->_cbclass . '::' . $func, $args);
}
private function do_parse_args($str)
{
preg_match_all($this->args_expr, $str, $m);
if (empty($m[3])) return NULL;
return array_combine($m[1], $m[3]);
}
}
class MyParserCallbacks
{
public static function func($args)
{
//var_dump($args);
return 'REGEXFTW';
}
}
$text = '[#func] blabla [#func tamanho="520x75"] teste [#func tamanho="520x75"]';
$parser = new Parser($text, MyParserCallbacks);
echo $parser->do_parse();
?>
以上是关于PHP 正则表达式文本语法分析器的主要内容,如果未能解决你的问题,请参考以下文章
前端学PHP之正则表达式基础语法
php正则表达式
正则表达式一基础语法
数据清洗 常用正则表达式大全
PHP中的正则
JavaScript 正则表达式详细分析