无为清净楼资源网 Design By www.qnjia.com
最近,我抽空改成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次或者无数次,*+这些表述次数的符号后面接的?标识非贪婪模式
看图,这个正则可以实现上述要求了。
但是,问题还没解决,我们还有一种情况没考虑,那就是
<coolcode
后面不一定接的就是lang="php"这样的属性啊,有可能是download,也有可能是linenum="on/off"啊,所以,我们的正则还需要改。
CFC4N把正则改为
<coolcode.*?lang="[a-z]+".*?>
截图如下
细心的朋友可能看出来图中匹配的红色框内多出了
<coolcode
,意思也就是说,前面的
<coolcode>
需要排除掉。如何排除呢?聪明的你肯定立刻想到.这个万能字符替换成非<>两个符号的规则,好,CFC4N立刻修改一下。
修改之后的正则为
<coolcode.*?lang="[a-z]+".*?>
果然,匹配正常了。结果见截图。
到这里,问题似乎解决了,可是,当初糊涂的我,把coolcode的两种开头标识都用了,那就是
<coolcode
和[coolcode,那么,看官您认为这个正则该如何改写呢?
没错,无非就是开头,结尾的标识考虑两种情况<和[,那么正则就好改了。(别忘了排除规则里的符号哦)
[<\[]coolcode[^<>\[\]]*?lang="[a-z]+"[^<>\[\]]*?[>\]]
嗯,好,我们来看下效果:
很好很完美。
下面,就可以去执行了。
可是,我遇到一个很意外的事情。居然发现老的代码里包含这样的格式
[coolcode linenum=\"off\" lang=\"cpp\"]<coolcode download=\"\" lang=\"cpp\" linenum="off">
呃,问题在这里了,只是多了个转义字符\罢了,那么,改起来,也简单。也就是允许\出现0次或者一次,而标识0次或者1次的符号为?,那么我们直接在\后面加个?,也就是改成这样\?就可以了吗?
显然,不是。在正则表达式里,\也表示转义,那么,匹配\的话,也得转义一下\,则应该为\\? 这样才对。
修改后正则为
[<\[]coolcode[^<>\[\]]*?lang=\\?"[a-z]+\\?"[^<>\[\]]*?[>\]]
匹配结果见下图:
现在,大功告成了。我们可以进行转换了。关于转换,我们可以用两种方法。
"php/cpp/javascript/sql/css等" download="name" linenum="on/off">
为对应的
[code lang="php/cpp/javascript/sql/css等"]
,这样操作,省的去写程序,取出,替换,再写入了,缺点是量大,手工也挺累,体力活。mysql仅仅支持正则查询,不支持正则查询的替换,我们也可以构造联合嵌套的SQL来替换正则匹配的字符串,但是无法取出php/cpp/javascrip这样的语言标记,替换为新的语言标记。也就是说,mysql不支持正则表达式的反向引用。
""中间的一个组名。正则修改为
[<\[]coolcode[^<>\[\]]*?lang=\\?"([a-z]+\\?)"[^<>\[\]]*?[>\]]
PHP的替换代码为
$contents = preg_replace('/[<|[]coolcode[^>[\]]*?lang=\\\\?"([^"]+?)\\\\?"[^>[\]]*?[>|\]]/i','[code lang="\\1"',$contents);
其中正则的i修饰符标识不区分大小写。
还有,别忘记了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 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次或者无数次,*+这些表述次数的符号后面接的?标识非贪婪模式
看图,这个正则可以实现上述要求了。
但是,问题还没解决,我们还有一种情况没考虑,那就是
<coolcode
后面不一定接的就是lang="php"这样的属性啊,有可能是download,也有可能是linenum="on/off"啊,所以,我们的正则还需要改。
CFC4N把正则改为
<coolcode.*?lang="[a-z]+".*?>
截图如下
细心的朋友可能看出来图中匹配的红色框内多出了
<coolcode
,意思也就是说,前面的
<coolcode>
需要排除掉。如何排除呢?聪明的你肯定立刻想到.这个万能字符替换成非<>两个符号的规则,好,CFC4N立刻修改一下。
修改之后的正则为
<coolcode.*?lang="[a-z]+".*?>
果然,匹配正常了。结果见截图。
到这里,问题似乎解决了,可是,当初糊涂的我,把coolcode的两种开头标识都用了,那就是
<coolcode
和[coolcode,那么,看官您认为这个正则该如何改写呢?
没错,无非就是开头,结尾的标识考虑两种情况<和[,那么正则就好改了。(别忘了排除规则里的符号哦)
[<\[]coolcode[^<>\[\]]*?lang="[a-z]+"[^<>\[\]]*?[>\]]
嗯,好,我们来看下效果:
很好很完美。
下面,就可以去执行了。
可是,我遇到一个很意外的事情。居然发现老的代码里包含这样的格式
[coolcode linenum=\"off\" lang=\"cpp\"]<coolcode download=\"\" lang=\"cpp\" linenum="off">
呃,问题在这里了,只是多了个转义字符\罢了,那么,改起来,也简单。也就是允许\出现0次或者一次,而标识0次或者1次的符号为?,那么我们直接在\后面加个?,也就是改成这样\?就可以了吗?
显然,不是。在正则表达式里,\也表示转义,那么,匹配\的话,也得转义一下\,则应该为\\? 这样才对。
修改后正则为
[<\[]coolcode[^<>\[\]]*?lang=\\?"[a-z]+\\?"[^<>\[\]]*?[>\]]
匹配结果见下图:
现在,大功告成了。我们可以进行转换了。关于转换,我们可以用两种方法。
"php/cpp/javascript/sql/css等" download="name" linenum="on/off">
为对应的
[code lang="php/cpp/javascript/sql/css等"]
,这样操作,省的去写程序,取出,替换,再写入了,缺点是量大,手工也挺累,体力活。mysql仅仅支持正则查询,不支持正则查询的替换,我们也可以构造联合嵌套的SQL来替换正则匹配的字符串,但是无法取出php/cpp/javascrip这样的语言标记,替换为新的语言标记。也就是说,mysql不支持正则表达式的反向引用。
""中间的一个组名。正则修改为
[<\[]coolcode[^<>\[\]]*?lang=\\?"([a-z]+\\?)"[^<>\[\]]*?[>\]]
PHP的替换代码为
$contents = preg_replace('/[<|[]coolcode[^>[\]]*?lang=\\\\?"([^"]+?)\\\\?"[^>[\]]*?[>|\]]/i','[code lang="\\1"',$contents);
其中正则的i修饰符标识不区分大小写。
还有,别忘记了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程序,留言即可,我抽空写出来。
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]