【问题标题】:How to replace custom bbcode tag containing structured content?如何替换包含结构化内容的自定义 bbcode 标签?
【发布时间】:2018-11-10 10:50:33
【问题描述】:

我有一个这样的字符串:"[dr]azAZ09-09[/dr]"

示例:[dr]my name here-25[/dr]

我要获取所有元素:

my name here
-
25

如何编写preg_split() 表达式(或其他函数)?

【问题讨论】:

  • 你的字符串 always 是否以[dr] 开头并以[/dr] 结尾?
  • 什么定义了“元素”?例如,您对[dx]a?})---7y3/!4[$[/dx]abcdef 有什么期望?
  • 你能包含更多的样本数据吗?
  • @Lilia 有超过 10 种不同的“正确”方法可以做到这一点。我们对您的问题要求知之甚少。请解释您的输入数据如何变化。告诉我们有关流程逻辑的更多信息,以便我们确保为您提供最佳模式。 [dr]azAZ09-09[/dr] 是整个输入字符串的示例还是可能是更大部分文本的子字符串?
  • 我解释得更好:我从数据库中提取了几篇文章。如果用户在帖子插入文本区域中输入以下“bbcode”:[dr] every thing - number [/dr] 在数据库中插入期间,我必须截取此字符串并将其转换为引号。当然,用户可以任意修改该字符串,但我至少只有“-”和“数字”,因为我需要在 php 代码中做其他事情

标签: php regex preg-replace bbcode


【解决方案1】:

不清楚你是否需要做一个简单的preg_replace()preg_replace_callback()(因为你“需要在php代码中做其他事情”)。

我现在可以为您提供的最佳解决方案是使用这种需要[dr]|[/dr] 标记和- 子字符串分隔符后跟一个或多个数字的模式。

模式:(Demo)

#  ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
#  ↓↓↓↓↓           ↓↓↓↓↓↓↓ 
  ~\[dr](.+?)-(\d+)\[/dr]~
#        ↑↑↑   ⬑⬑⬑---------------------- capture one or more digits
#        ⬑⬑----------------------------- capture one or more of any character

使用这两个捕获的子字符串,您可以使用preg_replace() 生成新的动态替换字符串。

代码:(Demo)

$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~\[dr](.+?)-(\d+)\[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);

输出:

<div>Reply to: <a href="user.php?id=25">my name here</a></div>

【讨论】:

  • 现在你的模式可以工作了。只有一件事:我怎样才能得到“-number”部分?示例:[dr]my name here-25[/dr] 我需要 25
  • 请更好地解释您的过程并包括您的编码尝试。如果我能看到你想要的结果,我可以很容易地解决你在做什么。我有一种感觉,你想要preg_replace_callback()
  • $search = array( '{\[dr](.+?)-(\d+)\[/dr]}siU' ); $replace = array( '&lt;div&gt;Reply to: \\2 [here I need a link to -NUMBER]&lt;/div&gt;' ); $newvar = preg_replace($search, $replace, $newvar);
  • 那么,根据您的样本输入,您想要的确切输出是什么? &lt;div&gt;Reply to: &lt;a href="user.php?id=[thenumber]"&gt;[thenumber]&lt;/a&gt;&lt;/div&gt;?还是您需要运行“查找”并将 [thenumber] 替换为其他值?
  • 你指定的href标签对我来说是完美的
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多