pcre编译没有UTF支持问题,怎么解决
关于 PCRE_UTF8 support 问题
PHP错误:?
preg_replace(): Compilation failed: this version of PCRE is piled with PCRE_UTF8 support?
上面的报错会导致preg_replace出错,在wordpress中会引起上传图片后图片缺少路径,变成1.,2.等恶心的问题。
解决的办法如下:
1. pcre --version 查看pcre版本
2.到/projects/pcre/files/pcre/ 下载对应版本的pcre
3.重新编译:??./configure --enable-utf8?
make make install
重启apache或者fpm,问题解决。
c语言 正则库 pcre 教程 (windows环境)
1、编译PCRE正则表达式库
(1) (MinGW + MSYS)
将PCRE源码包直接62616964757a686964616fe58685e5aeb931333330333038拷贝到MSYS目录下,(如:C:MSYS1.0pcre)
运行msys.bat启动MSYS,
在命令行输入
cd / // 回根目录
cd pcre // 进入PCRE目录
./configure // 配置编译
make // 编译全部
完成后,会在C:MSYS1.0pcre.libs 下生成所需要的文件:
libpcre-0.dll // PCRE的动态链接库
libpcre.dll.a // 调用PCRE动态链接库所用的LIB
libpcre.a // PCRE静态链接库
再配合上C:MSYS1.0pcre目录下的"pcre.h",就可以在程序中加入正则表达式支持了:)
(2) (于windows平台手动编译pcre,转载)
将 config.h.generic 重命名为 config.h
设置其中的 HAVE_BCOPY 参数为 0 (因为windows平台无bcopy()函数)
重命名 pcre.h.generic 为 pcre.h.
重命名 pcre_chartables.c.dist 为 pcre_chartables.c.
编译 dftables.c 成可执行文件,要加入参数 -DHAVE_CONFIG_H,以便导入 config.h 文件中的设置
/* 重命名 pcre_chartables.c.dist 为 pcre_chartables.c */
运行编译的可执行文件 dftables.exe ,参数为 pcre_chartables.c
即 dftables.exe pcre_chartables.c
新建工程,包含下列文件,编译成lib文件即可
pcre_internal.h
ucp.h
ucpinternal.h
ucptable.h
pcre_chartables.c
pile.c
pcre_config.c
pcre_dfa_exec.c
pcre_exec.c
pcre_fullinfo.c
pcre_get.c
pcre_globals.c
pcre_info.c
pcre_maketables.c
pcre_newline.c
pcre_ord2utf8.c
pcre_refcount.c
pcre_study.c
pcre_tables.c
pcre_try_flipped.c
pcre_ucp_searchfuncs.c
pcre_valid_utf8.c
pcre_version.c
pcre_xclass.c
这样就可以生成 libpcre.a 文件了 (vc,生成的是pcre.lib,大同小异)
2、使用生成的 libpcre.a (静态链接库)
在你的程序中添加:
#define PCRE_STATIC // 开启静态链接库支持(一定要添加该行,否则无法使用静态链接库)
#include "pcre.h" // PCRE头文件
并且添加 libpcre.a 到工程中,然后就可以在程序中使用PCRE函数了:)
编译选项 添加 /MT ,无头文件预编译.
3、使用生成的 libpcre-0.dll 和 libpcre.dll.a (动态链接库)
在你的程序中添加:
#include "pcre.h" // PCRE头文件
并且添加 libpcre.dll.a 到工程中,然后就可以在程序中使用PCRE函数了:)
================================================================================
命令行下的批处理解决方法 .如果已经下载,可以不用第一行.
goto START
首先确保控制台环境中有:
1、VC6命令行编译环境
2、wget.exe、unzip.exe、sed.exe、mv.exe
然后执行这个批处理文件,就可以得到VC版本的pcr.lib。
:START
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.zip
unzip pcre-7.7.zip
cd pcre-7.7
sed -e "s/#define HAVE_BCOPY 1/#define HAVE_BCOPY 0/g" config.h.generic > config.h
mv pcre.h.generic pcre.h
mv pcre_chartables.c.dist pcre_chartables.c
cl -MD -DHAVE_CONFIG_H dftables.c
dftables.exe pcre_chartables.c
cl -O1 -MD -DHAVE_CONFIG_H -c pcre_chartables.c
cl -O1 -MD -DHAVE_CONFIG_H -c pile.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_ucp_searchfuncs.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:libpcr.lib pcre_chartables.obj pile.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_ucp_searchfuncs.obj pcre_valid_utf8.obj pcre_version.obj pcre_xclass.obj
这样就出来了: pcre.h + libpcr.lib
==============================================================================
最近使用VC编译了一下她的源代码,其实步骤很简单, 如下
1 一些源文件改名
config.h.generic 改名为 config.h (注意里面的配置)
pcre.h.generic 改名为 pcre.h
pcre_chartables.c.dist 改名为 pcre_chartables.c
2 建立VC工程
建立一个VC的DLL工程,去掉原有的包含文件
将PCRE的所有pcre_*.c都加进去, pcre后面没有_的不要加, 后缀名是的不要加
可以参考上面的.还有.h 文件也是要的.
3 修改工程设置
增加工程预编译宏 HAVE_CONFIG_H
不使用预编译头 Not Using piled Headers
编译选项 添加 /MT
OK 完成以上三步,就可以在 VC 上编译通过了。
4 编译结果
使用时只需要编译出来的 .DLL .Lib 和 源代码目录的 pcre.h
centos安装pcre在哪里
1.可以删除,windows下软件安装完成,安装程序也一样可以删除2.在你 ./configure阶段,默认有--prefix的参数,程序就安装到prefix指定的目录下,你可以 ./configure --help看下prefix的默认值
pcre匹配后出现什么样的结果
参考如下代码:
#include?
#include?
#include?
int?main()
{
????pcre?*re;
????const?char?*error;
????int?errorOffset,?i?=?0;
????/**
?????*?pcre_exec匹配的结果
?????*?ovector的结构为
?????*?{匹配结果1的起始位置,匹配结果1的结束位置,匹配结果2的起始位置,...匹配结果N的结束位置}
?????*/
????int?ount?=?2,?ovector[ount];
????/**
?????*?rc是pcre_exec匹配到的结果数量
?????*/
????int?rc;
????/**
?????*?pcre_exec执行的偏移量
?????*?从匹配到的结果的结束位置开始下一次匹配
?????*/
????int?exec_offset?=?0;
????const?char?*captured_string;
????char?*subject?=?"1t2t3t4t5t6t7t8t9t0tatbtct黄t避孕t";
????char?*pattern?=?"[^t]+t";
????re?=?pile(?pattern,?PCRE_CASELESS,?&error,?&errorOffset,?NULL?);
????if?(?re?==?NULL?)?{
????????printf(pilation?failed?at?offset%d:?%s
",?errorOffset,?error);
????????return?0;
????}
????do?{
????????//?exec_offset偏移量?默认从1开始,然后循环的时候从匹配到的结果开始
????????rc?=?pcre_exec(?re,?NULL,?subject,?strlen(subject),?exec_offset,?0,?ovector,?ount?);
????????if?(?rc?>?0?)?{
????????????//?获取到匹配的结果
????????????pcre_get_substring(?subject,?ovector,?rc,?0,?&captured_string?);
????????????printf("captured?string?:?%s
",?captured_string);
????????????//?设置偏移量
????????????exec_offset?=?ovector[1];
????????????i++;
????????}
????}?while?(?rc?>?0?);
????printf("match?%d
",?i);
????return?0;
}