在自定义bbcode应用程序中正确的正则表达式语法


correct regex synthax in custom bbcode apllication

我希望将prism语法荧光笔集成到我自定义构建的php/mysql CMS中;然而,我有一些问题与正则表达式语法。这就是我希望完成的:

  • 允许用户发布
    • 单独文本,
    • 或代码和文本,但绝不是单独代码。
  • 代码可以在前面加文本,也可以在代码之后加文本。

我的PHP代码如下:

function bbcode2html($var)
{
    // [code]
    $var = preg_replace('/'[code](.+?)'['/code]/si',
    '<section class="language-markup">
          <pre><code>$1</code></pre>
     </section>', $var);
    return $var;
}
$var = '[code]<!DOCTYPE html>[/code] THis is text';
// verify content input
if(!preg_match("/(w+?)|'[code](.+?)'['/code]/si", $var))
{
    echo 'The code tags can not be empty!';
}
elseif(!preg_match("/(w+?)|'[code](.+?)'['/code](w+)/si", $var))
{
    echo 'Your post contains only code, please add some text';
}else{
echo $var = bbcode2html(htmlentities($var));}
在上面的代码中,这是我观察到的:

  • 当单独发布文本时,我得到这个反馈'代码标签不能为空!'
  • 当文本和代码发布时,我得到这个反馈'你的帖子只包含代码,请添加一些文本'

因此,我需要关于正确的正则表达式语法的线索,这将使我实现这两个目标:

  • 允许用户单独发布文本,或者代码和文本,但不能单独发布代码。
  • 代码可以在前面加文本,也可以在代码之后加文本。

谢谢。

做两个检查怎么样:

  • 在剥离所有[code]...[/code]并修剪后,验证字符串包含一个[[:alnum:]]。
  • 检查空代码标签

参见eval.in

示例
$var = '[code]<!DOCTYPE html>[/code] THis is text';
// code alone or nothing
if(!preg_match('~[[:alnum:]]~', trim(preg_replace('~'[code'].*?'[/code']~', "", $var))))
{
    echo 'Please add some text...';
} else {
    // empty code tags
    if(preg_match('~'[code']'s*'[/code']~', $var))
    {
        echo 'The code tags can not be empty!';
    // fine
    } else {
        echo "wohoOoo it works!";
    }
}