>

coolcode转SyntaxHighlighter与Mysql正则表达式完成解析

- 编辑:正版管家婆马报彩图 -

coolcode转SyntaxHighlighter与Mysql正则表达式完成解析

不久前,作者偷闲改成SyntaxHighlighter。由于coolcode插件的开端标签是
<coolcode>
或者[coolcode]这样的,而SyntaxHighlighter是

[code lang="php"]
那样的(也许别的卡塔尔。遂只可以想办法把老的格式转变成新的格式。当然,料定用到正则表明式了。
原本的代码高亮初始标记为

<coolcode lang="php" download="123.php" linenum="on"><coolcode lang="php" linenum="off"><coolcode lang="php">
那连串型的,
而SyntaxHighlighter的标记为

[code lang="php"]
那依据须要写的正则表明式为

<coolcode lang="[a-z]+".*?>
解释一下

复制代码 代码如下:

[a-z]+ 匹配 php,javascript,cpp,sql,css 等,后面的.*?中的 .表示别的除了换行之外的字符,而*表示0次也许无数次,*+那么些表述次数的标志前面接的?标志非贪婪格局

图片 1
看图,那个正则能够兑现上述供给了。

可是,难点还未化解,大家还也许有生龙活虎种情形没思忖,这正是
<coolcode
末尾不肯定接的便是lang="php"那样的性质啊,有希望是download,也可能有极大也许是linenum="on/off"啊,所以,我们的正则还亟需改。
CFC4N把正则改为
<coolcode.*?lang="[a-z]+".*?>
截图如下
图片 2
密切的爱人大概看出来图中相当红色框内多出了
<coolcode
,意思相当于,前边的

<coolcode>
必要免去掉。怎样肃清呢?聪明的你势必顿时想到.这几个万能字符替换到非<>几个标记的法则,好,CFC4N立时修正一下。
改正之后的正则为

<coolcode.*?lang="[a-z]+".*?>
果然如此,相配寻常了。结果见截图。
图片 3
到此处,难点就像缓和了,可是,当初糊涂的自家,把coolcode的二种起头标记都用了,那便是

<coolcode
和[coolcode,那么,看官您以为那么些正则该怎么样改写呢?
没有错,无非正是开端,结尾的标志思忖三种意况<和[,那么正则就好改了。(别忘了消灭准则里的暗号哦卡塔尔
[<[]coolcode[^<>[]]*?lang="[a-z]+"[^<>[]]*?[>]]
嗯,好,大家来看下效果:
图片 4
很好很完备。
上面,就足以去实施了。
但是,笔者蒙受多个很意外的事务。居然发掘老的代码里含有那样的格式
[coolcode linenum="off" lang="cpp"]<coolcode download="" lang="cpp" linenum="off">
呃,难题在这了,只是多了个转义字符而已,那么,改起来,也简要。相当于允许现身0次依然二遍,而标记0次依旧1次的号子为?,那么大家直接在背后加个?,也正是改成这么?就足以了啊?
鲜明,不是。在正则表明式里,也象征转义,那么,相配的话,也得转义一下,则应为\? 那样才对。
修改后正则为
[<[]coolcode[^<>[]]*?lang=\?"[a-z]+\?"[^<>[]]*?[>]]
相配结果见下图:
图片 5
明日,马到功成了。大家得以开展转变了。关于转变,大家可以用三种艺术。

•Mysql的REPLACE函数,单个的去替换
<coolcode lang="php/cpp/javascript/sql/css等" download="name" linenum="on/off">
为对应的
[code lang="php/cpp/javascript/sql/css等"]
,那样操作,省的去写程序,抽出,替换,再写入了,劣势是量大,手工业也挺累,体力活。mysql仅仅扶持正则查询,不支持正则查询的轮番,我们也能够组织联合嵌套的SQL来替换正则相配的字符串,可是不能够抽出php/cpp/javascrip那样的言语符号,替换为新的言语符号。约等于说,mysql不帮助正则表达式的反向引用。

•PHP读数据库,替换,再写入。PHP的preg_replace函数支持反向引用(preg_replace不扶植自定义组名的反向援用卡塔 尔(阿拉伯语:قطر‎,大家只可以写个查询语句,查询包罗coolcode标志的稿子,然后再更换,当然,直接询问包含coolcode的文章也许太多,我们也得以写个MYSQL扶植的POSIX正则引擎的表达式,来合营使用coolcode标签的稿子,再来替换,写入。以减少小说的操作量。当然正则表明式也会浪费十分大的财富。
当然,在PHP代码的preg_replace函数使用方面包车型大巴正则,进行反向援用时,供给对正则稍作匡正。给lang=""中间的八个组名。正则改善为
[<[]coolcode[^<>[]]*?lang=\?"([a-z]+\?)"[^<>[]]*?[>]]
PHP的交替代码为
$contents = preg_replace('/[<|[]coolcode[^>[]]*?lang=\\?"([^"]+?)\\?"[^>[]]*?[>|]]/i','[code lang="\1"',$contents);
此中正则的i修饰符标记不区分轻重缓急写。
图片 6
再有,别忘记了coolcode的利落标记和[/coolcode]要替换到[/code]。
mysql里实践两句sql就可以

复制代码 代码如下:

UPDATE wp_posts SET post_content = REPLACE(post_content,'</coolcode>','[/code]'); //注意后边多了个反斜杠,记得去掉
UPDATE wp_posts SET post_content = REPLACE(post_content,'[/coolcode]','[/code]'); //注意前面多了个反斜杠,记得去掉

总结:
正文牵扯的正则表明式并无高端用法,都以常常相当粗略的用法。关于PCRE引擎正则表达式的递归(迭代),组命名,反向引用,零宽断言等,CFC4N会在事后的时日里,找合适的例子写出来。当然,那么些高端用法,CFC4N在帮朋友写的正则表明式里早已采纳了,我们能够看看,款待商量和辅导。
PS:假若需求coolcode转SyntaxHighlighter的欧洲经济共同体PHP程序,留言就能够,小编偷闲写出来。

coolcode 或者[coolcode]这样的,而SyntaxHighlighter是 [code lang="php"] 这样的(或者其...

本文由网络计算发布,转载请注明来源:coolcode转SyntaxHighlighter与Mysql正则表达式完成解析