新闻内容块和自定义正则表达式

时间:2011-07-21 07:23:32

标签: php regex module block

我需要创建一个小工具来通过php软件为我的编辑创建新闻文章。我创建了一种使用自定义块和模块的方法来帮助编辑器包含静态或动态块和模块,包括在文本中:

示例:

Lorem ipsum dolor坐下来,精神上的精神。 Etiam in mollis libero。 Phasellus sollicitudin ligula pharetra magna egestas mattis。 {block name =“ads1”} Aenean lacinia lacinia sapien nec fermentum。 {module name =“thename”class =“Thelist”method =“Show”parameter1 =“first parameter”parameter2 =“second parameter”parameter3 =“third parameter”} Donec ligula lectus,egestas et molestie ac,tristique id mi。 Donec sed scelerisque leo。

我正在使用两个正则表达式:

  1. $ex = preg_match_all("/{((?:module|block).*?)}/sm", $text, $matches);
  2. preg_match_all ( '/^{module\s+|\G(name|class|method)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))/i', $module, $matches );
  3. 第一个获取新闻文章中的所有项目。第二个将每个块和模块拆分成一个数组。

    问题: 第二个正则表达式没有得到所有参数,只有一个!我需要获取编辑在新闻文章内容中写的所有参数。

2 个答案:

答案 0 :(得分:1)

你不是在搜索它们。

^{module\s+|\G(name|class|method|parameters)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))
                                          ^

您搜索术语parameters后跟=,但这不存在。您将它们命名为parameter1,依此类推。所以改为

^{module\s+|\G(name|class|method|parameter\d+)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))

应该帮助你。

答案 1 :(得分:1)

也许尝试分2步完成

1找到所有模块

preg_match_all( '(.*{module(.+)}.*)Ui', $module, $matches );

preg_match_all( '(.*{(module|block)(.+)}.*)Ui', $module, $matches);

2查找每个模型/块的参数

preg_match_all ( '(([a-zA-Z0-9]+)=\"(.+)\")Ui', $module, $matches );