【问题标题】:How to choose between explode and regex如何在爆炸和正则表达式之间进行选择
【发布时间】:2012-03-28 06:30:30
【问题描述】:

我的字符串包含[hotkey] 形式的一些“热键”。例如:

"This is a sample string [red] [h1]"

当我用 php 函数处理这个字符串时,我希望函数输出原始字符串,如下所示;

<font color='red'><h1>This is a sample string</h1></font>

我想使用这个函数纯粹是为了方便一些打字。我可能会使用字体标签或 div 或其他任何东西,我们不要讨论这个。重点是这个;热键将导致原始字符串被包装到

<something here>original string<and something there>

所以函数首先需要判断是否有热键。这很简单;看看有没有[

然后我们需要处理字符串以确定存在哪些热键,并进入 biz 逻辑以部署哪些包装器。

最后我们必须从热键中清除原始字符串并返回结果。

我的问题是,是否有一个正则表达式可以更有效地实现这一点,然后是我计划实现该功能的以下解析方法。

第 1 步 使用 [ 分隔符将字符串分解为数组

第 2 步 遍历每个数组元素以查看是否存在关闭 ] 并形成定义的热键之一,如果是,则执行必要的操作。

显然,此方法没有使用任何正则表达式功能。我想知道正则表达式在这里是否有帮助。或者,您有什么更好的建议吗?

【问题讨论】:

  • 必须说:没有阅读整个问题。但是你应该用谷歌搜索“BBCode Parser PHP”。已经有现成的实现,用于(看起来)你想要实现的目标。
  • 我认为正则表达式是要走的路

标签: php regex parsing explode


【解决方案1】:

如果[] 是您唯一需要担心的分隔符,您可能可以使用strtok

【讨论】:

  • 我在你提到它之后阅读了 strtok,但没有理解它。我不知道如何在这里使用它。我想我将不得不坚持我原来的伪算法。
【解决方案2】:

我的英语说得不好,但我看到了你的例子:

"This is a sample string [red] [h1]"

<font color='red'><h1>This is a sample string</h1></font>

如果我是你:

$red = substr( $chaine, strpos($chaine, '['), strpos($chaine, ']') );

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多