【问题标题】:How to make PHP BB Codes with RegExp?如何使用 RegExp 制作 PHP BB 代码?
【发布时间】:2012-05-05 01:45:10
【问题描述】:

对于我的网站,我想要一个简单的 BB 代码系统。没什么特别的——只是超链接和图像现在就可以了。

我不擅长 RegExp。时期。但是如果有人可以给我看一个例子,我也许可以把它克隆成不同的标签。

非常感谢您的帮助!

【问题讨论】:

  • 使用搜索的示例:stackoverflow.com/questions/8737846/…
  • 请解释否决票。否决这个问题并没有说明什么。 (我相信适当的答案是X”但没有人给出它,他们只是投了反对票。 --- Aso 我怀疑这是一个重复的帖子(没有投票)
  • 我认为反对票是由于问题没有显示任何先前的研究 - 我们喜欢这里的先前努力!也就是说,如果您对 Markdown PHP 进行网络搜索,您会找到一个可以为您执行此操作的库,即现成的 :)
  • 我之前尝试过查找 PHP RegExp,但我看到的只是分隔符列表,然后是一堆巨大的表达式,对于像我这样的初学者来说似乎有点难。

标签: php regex parsing bbcode


【解决方案1】:

我不得不想象这在某个地方是免费存在的,但这就是我的做法。

// Patterns
$pat = array();
$pat[] = '/\[url\](.*?)\[\/url\]/';         // URL Type 1
$pat[] = '/\[url=(.*?)\](.*?)\[\/url\]/';   // URL Type 2
$pat[] = '/\[img\](.*?)\[\/img\]/';         // Image
// ... more search patterns here

// Replacements
$rep = array();
$rep[] = '<a href="$1">$1</a>';             // URL Type 1
$rep[] = '<a href="$1">$2</a>';             // URL Type 2
$rep[] = '<img src="$1" />';                // Image
// ... and the corresponding replacement patterns here


// Run tests
foreach($DIRTY as $dirty)
{
    $clean = preg_replace($pat, $rep, $dirty);

    printf("D: %s\n", $dirty);
    printf("C: %s\n", $clean);
    printf("\n");
}

输出:

D: Before [url]http://www.stackoverflow.com[/url] after
C: Before <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> after

D: Before [url]http://www.stackoverflow.com[/url] [url]http://www.google.com[/url] after
C: Before <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> <a href="http://www.google.com">http://www.google.com</a> after

D: Before [url=http://www.stackoverflow.com]StackOverflow[/url]
C: Before <a href="http://www.stackoverflow.com">StackOverflow</a>

D: Before [img]https://www.google.com/logos/2012/haring-12-hp.png[/img] after
C: Before <img src="https://www.google.com/logos/2012/haring-12-hp.png" /> after

对于您添加的每个$pat 模式元素,您需要添加一个$rep 元素。 $DIRTY 数组只是一个测试用例列表,可以是您认为足够的任何长度。

这里的重要部分以及您将使用的部分是 $pat$rep 数组以及 preg_replace() 函数。

【讨论】:

  • Daedalus 更符合我的想法——我见过我的一个朋友在几行类似的情况下做到了这一点,尽管你的方法似乎很有趣。谢谢!
  • 大声叹息,行数更少!= 更好——尤其是在这种情况下——但祝你好运先生。
  • 另外,这也是您转换[url]标签和[img]标签的标准BBCode类型的方法。
【解决方案2】:

用户要求一些简单的东西,所以我给了他一些简单的东西。

$input = "[link=http://www.google.com]test[/link]";
$replacement = preg_replace('/\[link=(.*?)\](.*?)\[\/link\]/', '<a href="$1">$2</a>', $input);

/\[link=(.*?)\](.*?)\[\/link\]/ 是正则表达式,&lt;a href="$1"&gt;$2&lt;/a&gt; 是格式,$input 是输入/数据,$replacement 是返回值。

【讨论】:

  • 如果您使用 PHP4+,$n 表示法优于 \\n -- 请参阅 the doc
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
相关资源
最近更新 更多