【问题标题】:How to find many instances of a specific pattern in RegEx?如何在 RegEx 中找到特定模式的多个实例?
【发布时间】:2012-02-21 21:23:11
【问题描述】:

目前(在 PHP 中)我有以下正则表达式模式:

\[(.*) (.*)=(.*)\]

这匹配 [doSomething limit=true]

最终结果是我的代码将解释该字符串并将其替换为编码为返回的任何值。

但是,我的一些代码需要将多个变量发送给函数,例如:

[doSomething limit=true otherlimitation=false sendfile=1 title="hello there"]

如何使正则表达式中的 (.)=(.) 可重复,以便它匹配通过发送的每个变量,包括函数的第一个(最重要的)名称?

【问题讨论】:

  • 你应该用谷歌搜索一个现成的 BBCode 库。
  • 谢谢,我会看看它,但我不想让我的代码负担过重,让它比我必须的慢,这就是为什么我不喜欢使用笨重的 3rd 方编写的东西。
  • 那通常是想用盒子代替轮子。在最好的情况下它根本行不通,在最坏的情况下你会引入其他人已经解决的安全问题。
  • 这可能是真的,但是在检查了您的 Google 建议的结果之后,我不得不提到,强迫任何人安装超过他们使用我的网络应用程序所需的更多内容,这违背了他们为什么想在 Wordpress 或 Drupal 等上面使用我的网络应用程序。将代码保持在最低限度,并且非常轻量级且易于安装/维护,从而打造出出色、快速、可扩展的 Web 应用程序。

标签: php regex recursive-regex


【解决方案1】:

以下内容可能对您有用:

\[(.*) ((.*)=(.*))+\]

您可能还想用加号替换星号。目前,您的正则表达式将匹配 [ =] 作为有效字符串。

\[(.+) ((.+)=(.+))+\]

【讨论】:

  • 看起来,末尾的 + 号使得 PHP 中的 preg_replace() 不匹配任何内容。有什么建议么?在正则表达式测试器中,它似乎工作正常
  • 我对@9​​87654324@ 的怪癖不是很熟悉。对不起。
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多