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 正则表达式详细分析