包含标签 regexp 的文章

Vim多行匹配以及排除字符串

Vim多行匹配以及排除字符串

原文地址:https://blog.zengrong.net/post/1429.html

一个很简单的需求,在下面的XML文件中匹配 <frame> 块。

一开始写了一个:

^\s\+<frame>\_[^\(frame\)]*<\/frame>

这样能达到需求,但是却是凑巧。

因为 [^\(frame\)] 其实并不会匹配一个frame字符串,它依然是将组中的字符串单独对待的。如果在<frame>块之间包含frame中的任何一个字符串,那么匹配就会失败。

凑巧的是,正好在下面的范例中,并没有出现这样的情况。

既然有问题,那么就修改下,最终的版本是这样的:

^\s\+<frame>\(frame\)\@!\_.*<\/frame>

\@! 相当于 perl正则表达式中的 ?!,它的含义是“不匹配一个组”。\@! 后面需要跟 . 来确定匹配范围。为了匹配换行,这里使用了\_.

Vim的正则格式真是不走寻常路啊……无处不在的转义和非转义让人崩溃……

……

阅读全文

使用正则表达式解决配置文件字符串替换的思路和例子

正则表达式是非常强大的字符串处理工具,但由于晦涩难懂,唯有不断的学习和使用,才能积累经验。我使用正则表达式总是断断续续,所以水平也很初级。下面就记录这次的使用经验,备查。

下面的xml代码是一个游戏技能配置文件的简化版,其中的items是一个技能,item是该技能的一个级别的值。desc属性是该技能的介绍文本。由于介绍中包含对技能的效果的引用,而技能的效果在不同的技能级别中的值是不同的,因此这里使用定界符来标识可能会变动的值。

针对定界符,我制定的规则很简单,用花括号 {} 包含要替换的属性值即可,如 {key} ,其中key就是属性名称。对于使用数组方式提供的属性值,则使用 {key[n]} 的方式来提供,其中n是数组的索引。

程序中要做的,就是在游戏中需要技能的介绍的时候,会根据技能的级别获取到相关的的值,然后查询desc中有哪些定界符,再根据定界符获取到item中的值,最后进行替换。

这个工作虽然并不复杂,但也不是indexof能够解决的,后面就是我使用正则表达式的处理思路。对于XML的解析,我使用E4X。

……

阅读全文

最近文章

分类

标签

3d aac actionscript adobe adobebug adsl air amd android ane ant antivirus apache api arch as2 as3 asdoc asp aspnet authorware bash bbpress benq bitandbyte bitmapdata bluetooth book box2d browser byewindows c camera capture centos character-set choice chongrenxindu chrome class cms cocos2d-x codec collection color component conference cookbook coolplayer cpp css cygwin datagrid debug degrafa design-pattern develop devops director display-objects docker dragonbones ds eclipse editgrid egret embed emotion encrypt engine english eval excel exif fcs ffmpeg filter firebase firefox flash flash-remoting flashbuilder flashdevelop flashplayer flask flex flexbuilder flv fms font framework freeware fte ftp fxg game gcc general generator git gmail godaddy golang google gprs graphic graphviz gtd gui h264 hardware hexo host house howto hp html html5 http hugo i18n ie image ime ios iot jacky-cheung java javascript job joomla journey jquery json layout lecture library life lighttpd linux lisp list live loader lua mac macos mambo management markup master math mencoder mingw mobile mobile-game-framework module monitor mvc mxmlc mysql ndk netconnection netstream network nginx node nodejs note objective-c office opengl openresty opensource ops osmf osx pay pda performance photoshop php physics player plist plugin portable posix ppc protocol proxy python qiqi qt quick2cocoslua reading reflection regexp ria robotlegs router rtmp ruby sagiteam sandbox sdk server sharedobject shell signals simulator skeletalanimation skin sleepmode smartphone socket software spark spreadsheet spritesheet sql sqlalchemy ssh staticize study svn swfobject terminal testing thread tipsandtricks tlf trace training translate translation tween typescript ubuntu ugly ui unity usingrobotlegs2 utf-8 uwsgi validator vcard vector video vim virtualization vr web weboffice websocket wifi windows wine word wordpress wuhan xbeta xinnet xml youshootfirst zhihu

其它