我正在寻找Javascript或PHP中的BBCode解析器,而无需使用Regex.谁能建议我一个好人?
我正在为一个论坛开发一个应用程序.
我需要一个像Tapatalk那样的剧透按钮
隐藏文本部分,仅在用户单击按钮时显示.
我收到了帖子的所有文字,包括剧透BBCode.我已设法通过以下正则表达式获取扰流板的内容:
\[SPOILER\](.+?)\[\/SPOILER\]
Run Code Online (Sandbox Code Playgroud)
我的问题是我想添加一个剧透按钮,但我的所有文本都是类似HTML的,因为每个对象(图像,链接,格式代码等等)都是用HTML翻译的,然后由Android用Html方法处理.fromHtml().
这是解析方法,将BBCode"转换"为HTML:
private static String parsePostContent(String text){
String html = text;
Map<String,String> bbMap = new HashMap<>();
bbMap.put("(\r\n|\r|\n|\n\r)", "<br/>");
bbMap.put("\\[b\\](.+?)\\[/b\\]", "<strong>$1</strong>");
bbMap.put("\\[i\\](.+?)\\[/i\\]", "<span style='font-style:italic;'>$1</span>");
bbMap.put("\\[u\\](.+?)\\[/u\\]", "<span style='text-decoration:underline;'>$1</span>");
bbMap.put("\\[h1\\](.+?)\\[/h1\\]", "<h1>$1</h1>");
bbMap.put("\\[h2\\](.+?)\\[/h2\\]", "<h2>$1</h2>");
bbMap.put("\\[h3\\](.+?)\\[/h3\\]", "<h3>$1</h3>");
bbMap.put("\\[h4\\](.+?)\\[/h4\\]", "<h4>$1</h4>");
bbMap.put("\\[h5\\](.+?)\\[/h5\\]", "<h5>$1</h5>");
bbMap.put("\\[h6\\](.+?)\\[/h6\\]", "<h6>$1</h6>");
bbMap.put("\\[quote\\](.+?)\\[/quote\\]", "<blockquote>$1</blockquote>");
bbMap.put("(?s)^\\[quote name=\"([^\"]+)\".*\\](.+)\\[\\/quote\\]", "<span style='font-style:italic;'>Citazione di: $1</span> <blockquote>$2</blockquote>");
bbMap.put("\\[p\\](.+?)\\[/p\\]", "<p>$1</p>");
bbMap.put("\\[p=(.+?),(.+?)\\](.+?)\\[/p\\]", "<p style='text-indent:$1px;line-height:$2%;'>$3</p>");
bbMap.put("\\[center\\](.+?)\\[/center\\]", "<div align='center'>$1");
bbMap.put("\\[align=(.+?)\\](.+?)\\[/align\\]", "<div align='$1'>$2");
bbMap.put("\\[color=(.+?)\\](.+?)\\[/color\\]", "<span style='color:$1;'>$2</span>");
bbMap.put("\\[size=(.+?)\\](.+?)\\[/size\\]", "<span style='font-size:$1;'>$2</span>");
bbMap.put("\\[img\\](.+?)\\[/img\\]", "<img src='$1' />");
bbMap.put("\\[img=(.+?),(.+?)\\](.+?)\\[/img\\]", "<img width='$1' …Run Code Online (Sandbox Code Playgroud) 如何在字符串中获取所有BBcodes但保留内容?
例:
[B]This is bold[/B] and This is [color=#FFCCCC]colored[/color]
Run Code Online (Sandbox Code Playgroud)
将会 :
这是大胆的,这是有色的
什么JavaCC语法实现了可以解析这些行的语法:
[b]content[/b]
content[/b]
[b]content
Run Code Online (Sandbox Code Playgroud)
尽管JavaCC解析器需要解析所有行,但它必须区分正确和错误的标记行为.
正确的标签就像第一行,它们有一个打开和关闭的标签.当标签匹配时,这将输出粗体格式化文本.
不正确的标签就像第2行和第3行一样,它们没有匹配的打开或关闭标签.当这些发生时,它们按原样写入输出,不会被解释为标记.
我已经尝试过下面的JavaCC代码(LOOKAHEAD = 999999).问题是,这种语法总是将所有内容都匹配为invalidTag()而不是bold().如何确保JavaCC解析器尽可能匹配bold()?
String parse() :
{}
{
body() <EOF>
{ return buffer; }
}
void body() :
{}
{
(content())*
}
void content() :
{}
{
(text()|bold()|invalidTag)
}
void bold() :
{}
{
{ buffer += "<b>"; }
<BOLDSTART>(content())*<BOLDEND>
{ buffer += "</b>"; }
}
void invalidTag() :
{
}
{
<BOLDSTART> | <BOLDEND>
{ // todo: just output token
}
} …Run Code Online (Sandbox Code Playgroud) 可能重复:
递归BBCode通过RegEx 解析
带BBCode
在PHP中删除字符串的所有BBCode标记及其内容的最佳方法是什么?
我能否帮助将一些PHP代码转换为jQuery/JavaScript?我想要的是一个简单的BBCode到HTML转换器.
这是PHP代码.我想用jQuery/JavaScript实现同样的功能.
$str = htmlentities($str);
// The array of regex patterns to look for
$format_search = array(
'#\[b\](.*?)\[/b\]#is',
'#\[i\](.*?)\[/i\]#is',
'#\[u\](.*?)\[/u\]#is',
);
// The matching array of strings to replace matches with
$format_replace = array(
'<strong>$1</strong>',
'<em>$1</em>',
'<span style="text-decoration: underline;">$1</span>',
);
// Perform the actual conversion
$str = preg_replace($format_search, $format_replace, $str);
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我需要用Ruby正则表达式消化一些bbcode.
我必须match使用命令分隔元素并使用正则表达式/pattern/m来删除换行符.
例如,我在字符串中的bbcode是:
s="[b]Title[/b] \n Article text \n [b]references[/b]"
Run Code Online (Sandbox Code Playgroud)
然后我match用来分隔文本的部分,特别是包含在[b]和之间的Title和References部分[/b]:
t=s.match(/\[b\](.*)\[\/b\]/m)
Run Code Online (Sandbox Code Playgroud)
我使用(..)语法来捕获正则表达式中的字符串,我\用来逃避特殊[和]字符./m是摆脱字符串中的换行符.
然后t[1]包含:
"Title[/b] \n Artucle text \n [b]references"
Run Code Online (Sandbox Code Playgroud)
而不是"Title".因为比赛并没有在第一次出现时停止[/b].t[2]由于同样的原因,它是nil而不是"References".
如何分隔通常的bbcode标签之间的文本部分?
在我目前的应用程序中,我创建了一个自定义BBCode编辑器 - 我使用了许多BBCode扩展,并且有其他集成要求,这使得我必须使用自己的编辑器而不是现成的编辑器.
创建这个,确保生成的BBCode始终有效,转换为良好的HTML等是很多工作,但我对结果非常满意.但是......事实上,我要求最终用户查看和编辑BBCode.拥有WYSIWYG会更好.我注意到SCEditor有一个WYSIWYG接口.借助Chrome优秀的调试器,我注意到以下内容
我可以继续我的探索,并弄清楚这一切是如何完成的.但是,我希望这里的某个人能够就这里需要的内容给我一些指示.我想,输入的BBCode以某种方式"转移"到隐藏的textarea中,动态解析为HTML,结果显示在内容可编辑的div中或沿着这些行显示的内容?还存在正确处理鼠标点击和选择的问题.
如何转换[b]xxx[/b]为<strong>xxx</strong>使用VB.NET Regex.Replace()?
谢谢.
我在Debian Squeeze上运行PHP5.3并且安装顺利.我使用dotdeb存储库升级到PHP5.4并发现bbcode函数不再有效.然后我尝试重新安装:
pecl uninstall bbcode
pecl install bbcode
Run Code Online (Sandbox Code Playgroud)
但它返回以下内容:
/tmp/pear/temp/bbcode/php_bbcode.c:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘bbcode_functions’
/tmp/pear/temp/bbcode/php_bbcode.c:65: error: ‘bbcode_functions’ undeclared here (not in a function)
make: *** [php_bbcode.lo] Error 1
Run Code Online (Sandbox Code Playgroud)
我已经安装了php5-dev,build-essential和ubuntu-dev-tools.完整结果如下:
# pecl install bbcode
downloading bbcode-1.0.2.tgz ...
Starting to download bbcode-1.0.2.tgz (46,961 bytes)
.............done: 46,961 bytes
7 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
building in /tmp/pear/temp/pear-build-root30VR7V/bbcode-1.0.2
running: /tmp/pear/temp/bbcode/configure
checking for …Run Code Online (Sandbox Code Playgroud)