Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 新闻内容块和自定义正则表达式_Php_Regex_Module_Block - Fatal编程技术网

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

Php 新闻内容块和自定义正则表达式,php,regex,module,block,Php,Regex,Module,Block,我需要创建一个小工具,通过php软件为我的编辑创建一篇新闻文章。我创建了一种使用自定义块和模块的方法,以帮助编辑器在文本中包含静态或动态块和模块: 示例: Lorem ipsum dolor sit amet,是一位杰出的献身者。莫利斯自由城的艾蒂安。大叶舌草{block name=“ads1”}Aenean lacinia lacinia sapien nec发酵液{module name=“thename”class=“Thelist”method=“Show”parameter1=“fir

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

示例:

Lorem ipsum dolor sit amet,是一位杰出的献身者。莫利斯自由城的艾蒂安。大叶舌草{block name=“ads1”}Aenean lacinia lacinia sapien nec发酵液{module name=“thename”class=“Thelist”method=“Show”parameter1=“first parameter”parameter2=“second parameter”parameter3=“third parameter”}完成以下操作:。Donec塞德十字勋章利奥

我使用两个正则表达式:

  • $ex=preg_match_all(“/{((?:模块|块)。*?)}/sm,$text,$matches)
  • preg\u match\u all('/^{module\s+\G(name | class | method)=(“[^”]+“[^\']+\'[^\']+\'.\s+(?=}$)/i',$module,$matches);
  • 第一种方法获取新闻文章中的所有项目,第二种方法拆分数组中的每个块和模块

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

    您没有搜索它们

    ^{module\s+|\G(name|class|method|parameters)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))
                                              ^
    
    您搜索术语
    参数
    ,后面跟着一个
    =
    ,但它不存在。您将它们命名为
    参数1
    ,依此类推。因此更改为

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

    应该可以帮助你。

    也许可以试着分两步来做

    1查找所有模块

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

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

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

    你好,Stema,谢谢你的回复。我发布了一个错误的正则表达式。我已经删除了正则表达式中的“参数”项。我的目标是在“方法”参数之后写入任何(key=value)。你好,Sukisan,你只提到了模块,我如何获得块呢?你可以为这两种情况更改第一个模式
    preg_match_all ( '(([a-zA-Z0-9]+)=\"(.+)\")Ui', $module, $matches );