title author date CreateTime categories
C# BBcode 转 Markdown
lindexi
2018-05-20 14:58:57 +0800
2018-2-13 17:23:3 +0800
C#

本文告诉大家一个简单的方法从 BBcode 转为 Markdown

本文的方法都是使用正则转换,现在支持的代码只有很少的常用标签,如果大家发现有转换失败的,请帮我修改代码,估计代码我不会进行修改。

最重要的就是转换 url 和 image,那么主要就告诉大家如何转换这两个

        private static string ConvertUrl(string str)
{
var regex = new Regex(@"\[url=(.+?)\]((?:.|\n)+?)\[\/url\]");
return regex.Replace(str, "[$2]($1)");
}

这就是转换 url 的代码,里面用了正则。一般使用正则拿到的数据就是(里的数据,如上面的代码,可能看起来有些复杂,那么用下面的代码告诉大家。

例如 需要拿出 123lindexifoo中的 lindexi ,那么正则可以这样写

123(lindexi)foo

如果需要拿到 lindexi ,可以使用下面代码

           var regex = new Regex(@"123(lindexi)foo");
if (regex.Match(str).Groups[1].Value == "lindexi")
{ }

实际使用会在 regex.Match 之后判断是否成功,而不是直接拿出来。从上面代码可以看到我使用了1而不是0,那么下面的代码拿到的字符串?

            var regex = new Regex(@"123(lindexi)foo");
str = regex.Match(str).Groups[0].Value;

这个 str 拿到是 123lindexifoo 就是原来匹配到的所有字符串。

如果需要替换某个字符串,可以使用下面的代码

            str = "123lindexifoo";
var regex = new Regex(@"123(lindexi)foo");
str = regex.Replace(str, "csdn"); str == "csdn"

如果想把上面的字符串替换为 lindexi csdn ,那么可以使用下面代码

         str = "123lindexifoo";
var regex = new Regex(@"123(lindexi)foo");
str = regex.Replace(str, "$1csdn");

可以看到上面的替换使用了 $1 ,这个就是第一个匹配拿到的字符串。如果需要拿第二个,就是使用$2,所以做这个很简单

从上面的代码可以看到,转换 image 可以使用代码

            var regex = new Regex(@"\[img\]((?:.|\n)+?)\[\/img\]");
return regex.Replace(str, "![$1]($1)");

转换其他的代码上传到 github ,如果是在我博客可以直接看到

<script src="https://gist.github.com/lindexi/3ba74c909b23d6426c779d0a8eb435c3.js"></script>

2018-5-20-C#-BBcode-转-Markdown的更多相关文章

  1. OSC Source Code Innovation Salon(2018.10.20)

    时间:2018.10.20地点:北京 朝阳 浦项中心B座2层

  2. C# BBcode 转 Markdown

    本文告诉大家一个简单的方法从 BBcode 转为 Markdown 本文的方法都是使用正则转换,现在支持的代码只有很少的常用标签,如果大家发现有转换失败的,请帮我修改代码,估计代码我不会进行修改. 最 ...

  3. PCB 所建不凡 AWS 技术峰会2018 • 深圳站 2018.9.20

    在去[AWS 技术峰会2018 • 深圳站]之提前并没有AWS提前做功课,主要PCB这行业基本自己搭服务器搭应用,不会买云服务器.由于没用过企业级的云服务器,对云这方面还是了解还是非常有限的. 市面上 ...

  4. 2018.8.20 Python之路---常用模块

    一.re模块 查找: re.findall(‘正则表达式’,‘字符串’) 匹配所有符合正则表达式的内容,形成一个列表,每一项都是列表中的一个元素. ret = re.findall('\d+','sj ...

  5. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  6. 2018.9.20 Educational Codeforces Round 51

    蒟蒻就切了四道水题,然后EF看着可写然而并不会,中间还WA了一次,我太菜了.jpg =.= A.Vasya And Password 一开始看着有点虚没敢立刻写,后来写完第二题发现可以暴力讨论,因为保 ...

  7. 2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

    Java考试试题总结 一.单选题(每题1分 * 50 = 50分) 1.java程序的执行过程中用到一套JDK工具,其中javac.exe指( B ) A.java语言解释器 B.java字节码编译器 ...

  8. 2018.5.20 oracle强化练习

    --现在有一个商店的数据库,记录客户以及购物的情况, 商品表goods (商品号 goodsid varchar2(8) 商品名 goodsname varchar2(20) 单价 unitprice ...

  9. 【2018.10.20】CXM笔记(思维)

    1. 给你个环状字符串,问从哪个地方拆开能使它的字典序最小. 先预处理任意子串的哈希值. 然后枚举拆点,将它与当前最优的拆点比较谁更优(就是从哪拆的字典序更小),具体方法是二分+哈希找出两串最长的相同 ...

  10. 【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」

    题目链接 题目描述 JOIOI 王国是一个 $H$ 行 $W$ 列的长方形网格,每个 $1\times 1$ 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 $JOI ...

随机推荐

  1. Mardown加上目录

    适合Jekyll+Github模式下post.html 中加入如下代码,会在页面加载时生成目录结构: 有两种方案: 方案一效果

  2. Web开发中的服务器跳转与客户端跳转

    两者比较如下: 跳转类型  客户端请求次数 服务端响应次数 URL变化 站外跳转 作用域 服务器跳转 1 1 无 否 pageContext.request.session.application 客 ...

  3. 【POJ2893&HDOJ6620】M × N Puzzle(n*m数码判定)

    题意:给定一个n*m的矩阵,其中不重复地填[0,n*m-1],问是否能通过有限步数将0移到右下角 n,m<=1e3 思路:结论题 当板子了 #include<bits/stdc++.h&g ...

  4. [CSP-S模拟测试]:Walk(树的直径+数学)

    题目描述 给定一棵$n$个节点的树,每条边的长度为$1$,同时有一个权值$w$.定义一条路径的权值为路径上所有边的权值的最大公约数.现在对于任意$i\in [1,n]$,求树上所有长度为$i$的简单路 ...

  5. DDL DML DCL的理解

    DDL的操作对象是表,不会对具体的数据进行操作. DML的操作对象是记录, DCL的操作对象是数据库对象的权限.

  6. 不间断电源(UPS)

    UPS电源一般指不间断电源 UPS(Uninterruptible Power System/Uninterruptible Power Supply),即不间断电源,是将蓄电池(多为铅酸免维护蓄电池 ...

  7. CentOS-7.4(1708)release notes发行注记

    Red Hat Enterprise Linux 当前的最新版本是 7.3. Red Hat Enterprise Linux 7 当前仅支持 64 位CPU:64-bit AMD.64-bit In ...

  8. Type Interceptors

    Type Interceptors Castle.Core, part of the Castle Project, provides a method interception framework ...

  9. Label设置行间距

    内容摘要 UILabel显示多行文本 UILabel设置行间距 解决单行文本 & 多行文本显示的问题 场景描述 众所周知,UILabel显示多行的话,默认行间距为0,但实际开发中,如果显示多行 ...

  10. python web自动化测试框架搭建(功能&接口)——接口用例实现

    测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...