标签 正则表达式 下的文章

CMake编译pcrecpp静态库

  1. 下载并安装CMake(2.8.6),解压pcre(最新版本8.21)。

  2. 打开CMake GUI,指定"where is the source code:"到D:/dev/pcre-8.21,指定"where to build the binaries:"到D:/dev/pcre-8.21/out,点Configure,然后有很多配置,如果需要支持Unicode,勾选 PCRE_SUPPORT_UNICODE_PROPERTIESPCRE_SUPPORT_UTF8 ,支持Unicode就不能同时勾选PCRE_EBCDIC,然后点Generate

  3. 进入D:\dev\pcre-8.21\out打开PCRE.sln。如果你的project定义了/D "UNICODE",那么pcrecpp项目也需要这样定义。两者的运行时库也要保持一致(比如都是/MDd)。右击项目,生成。

  4. 在项目中引用生成的pcrecppd.lib和pcred.lib(这个也是需要的,否则链接报错),并加上头文件。

    include <pcrecpp.h>
    pragma comment(lib,"pcred.lib")
    pragma comment(lib,"pcrecppd.lib")
  5. 在项目“于处理器定义”中加上PCRE_STATIC

  6. Over.

notepad++正则表达式转换日期格式[mm/dd/yy mm:ss]为[yy.mm.dd]

使用了三个月的gtd软件:BooguNote,一个所谓的树形结构gtd软件。

我发现BooguNote软件的高级功能没用到几个,它使用xml来存储信息。因为本人应用比较肤浅,所以直接转成txt来得快一点。

其中一直实用BooguNote的F12 shortcut来快速插入当前日期,而且格式固定为:[mm/dd/yy mm:ss],i don't fancy that.所以我用notepad++的regular expression替换了一下。首先查找模式设定为“正则表达式”,不是“普通”也不是“扩展”哦。

\[(\d+)\/(\d+)\/(\d+) (\d+):(\d+)\]

替换为:

[20\3.\1.\2]

最后say good bye to BooguNote。

windows平台cl.exe编译pcre 8.33

最近在windows平台开发的一个project需要使用正则表达式,当然自己实现一个regexp也是可以的,只是太蛋疼且技术不到家。所以我优先考虑了open source的library,pcre是比较有名的库,在linux编译都是普通的套路,不过在win下面就稍微麻烦一点了。

编译的方法主要参考源代码zip包里面的NON-AUTOTOOLS-BUILD文件。

  1. 下载最新的pcre:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.zip (zip/tar.gz/tar.bz2三种格式任选一种,windows的一般用zip),并解压。
  2. 重命名config.h.generic为config.h,这是generic配置文件,需要根据具体的环境对预编译做相应修改。
    HAVE_BCOPY 1改为0,HAVE_INTTYPES_H 1改为0,HAVE_STDINT_H 1改为0。
    如果不修改,在下面编译dftables的步骤中会报错:  



    pcre_internal.h(198) : fatal error C1083: Cannot open include file: 'inttypes.h': No such file or directory

  3. 重命名pcre.h.generic为pcre.h,重命名pcre_chartables.c.dist为pcre_chartables.c

  4. cl -MD -DHAVE_CONFIG_H dftables.c生成dftables.exe

  5. dftables.exe pcre_chartables.c (修改了一些注释,不知道目的何在)

  6. cl -O1 -MD -DHAVE_CONFIG_H -c pcre_chartables.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_compile.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_config.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_dfa_exec.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_exec.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_fullinfo.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_get.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_globals.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_info.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_maketables.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_newline.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ord2utf8.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_refcount.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_study.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_tables.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_try_flipped.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ucd.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_valid_utf8.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_version.c

cl -O1 -MD -DHAVE_CONFIG_H -c pcre_xclass.c

lib -out:pcre.lib pcre_chartables.obj pcre_compile.obj pcre_config.obj pcre_dfa_exec.obj pcre_exec.obj pcre_fullinfo.obj pcre_get.obj pcre_globals.obj pcre_info.obj pcre_maketables.obj pcre_newline.obj pcre_ord2utf8.obj pcre_refcount.obj pcre_study.obj pcre_tables.obj pcre_try_flipped.obj pcre_ucd.obj pcre_valid_utf8.obj pcre_version.obj pcre_xclass.obj

最后生成的pcre.lib就是我们所需要的pcre库文件。

【注意】,如果要编译debug版本的pcre.lib,请用-MDd替代-MD,否则项目会出现“MSVCRTD.lib(cinitexe.obj) : warning LNK4098: 默认库“msvcrt.lib”的问题。

拷贝pcre.h和pcre.lib到我们自己项目的目录,然后在源代码顶部加入以下代码:

#include "pcre.h" 
#pragma comment(lib,"pcre.lib")

用以下代码测试:

version= pcre_version(); 

wchar_t *shit = (wchar_t *)malloc(strlen(version));

MultiByteToWideChar(CP_ACP,0,version,-1,shit,wcslen(shit));

MessageBox(hWnd,shit,shit,MB_OK);

正则表达式 mysql字段转oracle一例

某mysql字段如下:
`test_id` int(11) not null auto_increment comment '自增字段',
而且有大量的这样字段需要转到oracle,首先我们知道oracle的字段描述里面是没有comment的,但是同时也需要保留comment信息。使用正则表达式来转换,用notepad++正则表达式替换:
查找目标:

comment(.*),

替换为:

,comment\1

\1表示的是(.*)的内容
最后替换为:
`staff_id` int(11) not null auto_increment ,-- '自增字段'
然后去掉反引号,去掉auto_increment,手动加上constraint primary key。

正则表达式匹配所有字符

开始以为是.*,其实.*连在一起就意味着任意数量的不包含换行的字符。

所以可以使用

[\s\S]*

它的意思是任意空白字符和非空白字符。同理,也可以用 “[\d\D]*”、“[\w\W]*” 来表示。

d和D,w和W,s和S都是反义,加起来就是全部字符了。