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

发布于 2024-11-25 06:53:20 字数 916 浏览 1 评论 0原文

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

示例:

Lorem ipsum dolor sat amet,consectetur adipiscing elit。 Etiam 在 mollis libero 中。菜豆 (Phasellus sollicidin ligula pharetra magna egestas mattis)。 {block name="ads1"} Aenean lacinia lacinia sapien nec发酵。 {模块名称=“thename”类=“Thelist”方法=“显示”parameter1=“第一个参数”parameter2=“第二个参数”parameter3=“第三个参数”}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 ( '/^{模块\s+|\G(名称|类|方法)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?= }$))/i', $module, $matches );

第一个获取新闻文章中的所有项目,第二个将数组中的每个块和模块分开

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

I need to create a little facility to create a news article to my editors by a php software. I have created a way to use a custom block and module to help the editors to include static or dynamic blocks and modules just including in the text:

Example:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 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.

I am using two regex:

  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 );

The first one get all the items in the news article. The second one splits every block and modules in an array.

The question:
The second regex doesn't get all the parameters but just one! I need to get all the parameters that the editor writes in the content of the news article.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

惟欲睡 2024-12-02 06:53:20

你不是在寻找他们。

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

您搜索后跟 = 的术语 parameters,但这并不存在。您将它们命名为 parameter1 等等。所以改变

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

应该对你有帮助。

You are not searching for them.

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

You search for the term parameters followed by a =, but this does not exist. You named them parameter1 and so on. So change to

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

should help you.

一抹苦笑 2024-12-02 06:53:20

也许尝试分两步进行:

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 );

Maybe try to do it in 2 steps

1 to find all modules

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

or

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

2 to find parameters for each model/block

preg_match_all ( '(([a-zA-Z0-9]+)=\"(.+)\")Ui', $module, $matches );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文