导航:首页 > 源码编译 > 正则预编译

正则预编译

发布时间:2022-02-08 07:54:23

❶ c语言 正则库 pcre 教程 (windows环境)

1、编译PCRE正则表达式库

(1) (MinGW + MSYS)

将PCRE源码包直接拷贝到MSYS目录下,(如:C:\MSYS\1.0\pcre\)

运行msys.bat启动MSYS,

命令行输入

cd / // 回根目录

cd pcre // 进入PCRE目录

./configure // 配置编译

make // 编译全部

完成后,会在C:\MSYS\1.0\pcre\.libs\ 下生成所需要的文件:

libpcre-0.dll // PCRE的动态链接库

libpcre.dll.a // 调用PCRE动态链接库所用的LIB

libpcre.a // PCRE静态链接库

再配合上C:\MSYS\1.0\pcre\目录下的"pcre.h",就可以在程序中加入正则表达式支持了:)

(2) (于windows平台手动编译pcre,转载)

将 config.h.generic 重命名为 config.h
设置其中的 HAVE_BCOPY 参数为 0 (因为windows平台无b()函数)
重命名 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
pcre_compile.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,bcc生成的是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 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_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 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_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后面没有_的不要加, 后缀名是.cc的不要加
可以参考上面的.还有.h 文件也是要的.

3 修改工程设置

增加工程预编译宏 HAVE_CONFIG_H
不使用预编译头 Not Using Precompiled Headers
编译选项 添加 /MT

OK 完成以上三步,就可以在 VC 上编译通过了。

4 编译结果
使用时只需要编译出来的 .DLL .Lib 和 源代码目录的 pcre.h

❷ 在java中如何实现预编译

/*
* ProCompile.java *预处理要编译的文件,删除多余的空白,注释,换行,回车等
* Created on 2007年9月18日, 下午8:58 */ package javacompile; import java.io.*;
import java.util.regex.*;
import javax.swing.JOptionPane; /** * @com.junjian.sun public class PerCompile { File f = null;
String fileString = null;
Pattern p = null;
Matcher m = null;
String regex; //正则表达式 //初始化p
public PerCompile() {
regex ="(//.+)" + //(//.+) 对应单行注释
//"|(/\\*(.+\\n)+\\*/)"+ // 想对应多行注释... "|(\\r\\n)" + "|(\\n)"+//(\\r\\n)|(\\n)对应换行
"|(\\B\\s+)" ; // 空白符
String ss;
f = new File(new JOptionPane()
.showInputDialog("请输入文件所在路径~"));
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
ss = bf.readLine()+"\n";
fileString = ss; //如果没有这两句,ss的开头会有“null”
while((ss = bf.readLine())!= null){
fileString += ss+"\n"; bf.close();
} catch (IOException ex) {
ex.printStackTrace(); p = Pattern.compile(regex);
m = p.matcher(fileString); //执行替换所有多余空行,空白符,注释
void Dels(){
System.out.println("before: "+fileString);
if(m.find()) System.out.println("find!!");
System.out.println(m.replaceAll("")); } }

-

php正则 where预处理

<?php

$str="User=''andPass='12345'orid=6andkeylike'%555%'";
$str=preg_replace("/(=|like)(s*)S+/","$1$2?",$str);
echo$str;
?>

❹ 正则化 到底指什么

正则化是为了使用正则表达式用以在海量数据中迅速查找匹配的数据方法。

❺ JavaScript正则表达式cookie.replace(/^\s+|\s+$/g, '');什么意思

整体为如果cookie以一个或多个空格开始,替换全部空格为空,或者,如果cookie以一个或多个空格结束,替换全部空格为空。

符号含义:

s: space, 空格

+: 一个或多个

^: 开始,^s,以空格开始

$: 结束,s$,以空格结束

|:或者

/g:global, 全局

replace() 替换

(5)正则预编译扩展阅读:

基本特点

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

是一种解释性脚本语言(代码不进行预编译)。

主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。、

可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。

跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。

Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。

JavaScript脚本语言具有以下特点:

(1)脚本语言。JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。

(2)基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。

(3)简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。

(4)动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。

(5)跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用。

❻ 正则表达式中/i,/g,/ig,/gi,/m的区别和含义

/i忽略大小写的功能,是不能单独使用的。

/g在全文中查找所出现的指定字符串。

/ig忽略大小写在全文中查找指定字符串。

/gi/gi和/ig作用是一样的,都是忽略大小写在全文中查找指定字符串。

/m多行查找


正则表达式的通项: /pattern/flags 即(/模式/标记 )

构造器函数方法使用方法如下:

new RegExp("pattern"[, "flags"])(即new RegExp("模式"[,"标记"]))

pattern(模式)表示正则表达式的文本

flags(标记):如果指定此项,flags可以是下面值之一:

g: global match(全定匹配)i: ignore case(忽略大小写)gi: both global match and ignore case(匹配所有可能的值,也忽略大小写)

表达式建立同样的正则表达式例如:

/ab+c/gi

(6)正则预编译扩展阅读:

特点

正则表达式的特点是:

1、灵活性、逻辑性和功能性非常强;

2、可以迅速地用极简单的方式达到字符串的复杂控制。

3、对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到着名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

❼ (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]是什么语法

是javascript。

在java中要进行转义,所以转化成标准正则表达式后就是“!\^\.\*\$!([^!]+)!”

正则表达式中的\^表示形式是^本身的意思,\。\$,类似;所以最后的表达式是!^。美元!开头后跟任何非!字符串重复一次,直到无穷,然后是with!最后。例如:1321312!^属。美元!123年!123123.

如果你想让字符串只成为!^。美元!123年!如果两边没有其他字符,则在字符串的开头加上^,在字符串的末尾加上$。

(7)正则预编译扩展阅读:

正则表达式的特点是:

1、非常灵活,逻辑性和功能性;

2、复杂的字符串控件可以用一种非常简单的方式快速实现。

3、对于新联系人,更隐晦。

由于正则表达式的主要使用对象是文本,因此它们可以在各种文本编辑器中使用,从小型的、知名的Editplus到大型的编辑器(如MicrosoftWord和VisualStudio),在这些编辑器中正则表达式可以用于处理文本内容。

❽ VC66安装BOOST的正则表达式库和简单使用,最好有图文,分数不是问题

在WindowsXP下 VC6.0 编译安装Boost库
基本思路:
一、需要什么库:boost有些库是不用安装的,即直接#include <>包含头文件库就行了,但是有些很有用的库(thread-线程,regex-正则)需要根据不同的系统做不同的调整,所以必须编译(即如果你要使用例如正则表达式类的话就需要编译Boost库了)。
二、如何编译:
1、首先,生成bjam.exe。找到那个boostStrap.bat的东西,然后在CMD控制台下运行它,它会生成bjam.exe(类似c++的make,编译.jam用)
2、然后就可以通过bjam来编译boost库了,在命令行下输入bjam --help看选项。
如果嫌麻烦,可以一次将boost库需要编译的全部编译了,bjam --build-type=complete,生成库全在stage目录下。■
可按照上述基本思路去解决。
(据说c6.0不支持目前比较新版本,下面以一些较旧的版本为例)
下面是参考步骤:
在安装成功之前,我尝试了许多版本,如1.40,其他的安装了1.39,1.38,1.37,1.35都尝试安装过,但是都没有成功。这里中原 因限于个人知识水平暂无法深究,但我以为可能是vc6.0无法支持高版本所致。于是我尝试安装1.34版本,终于解决安装问题,由于只想使用其中的正则库,文内将只以该文件编译作为实例,其他的可以相同操作。
1、到Boost官方网站可以下载Boost的所有历史版本,这里我下载的是1.341版。
2、将Boost压缩解压到C:\Boost下。
3、将vc安装目录下\Microsoft Visual Studio\VC98\Bin 找到名为VCVARS32.BAT的批处理文件,并将其拷贝到C:\Boost\libs\regex\build目录下。
4、cmd进入到C:\boost\libs\regex\build目录下,执行VCVARS32.BAT(目的是使编译文件命令nmake可用,否则 将提示nmake既不是内部也不是外部命令)后,敲入:nmake -f vc6.mak对其进行编译,
5、数分钟后,待编译完成后,在C:\boost\libs\regex\build目录下将产生名为vc的文件夹。我们将vc文件夹下的lib文件和 dll文件全部拷贝,在vc安装目录下xxx \Microsoft Visual Studio\VC98\下新建文件夹,名称自定如BoostRegx,将lib和dll文件放入该文件夹中。
6、打开vc6.0选择“Tools->Options->Directories->Include files,加入包含文件路径"C:\BOOST"
7、选择"Tools->Options->Directories->Library file" 编辑添加库文件路径 xxx\MICROSOFT VISUAL STUDIO\VC98\BOOSTREGX(这个是前面建立的文件夹BoostRegx的位置)。
8、编写程序测试:
#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>

using namespace std;
using namespace boost;

regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

int main(int argc, char* argv[])
{
std::string in;
cmatch what;
cout << "enter test string" << endl;
getline(cin,in);
if(regex_match(in.c_str(), what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what.str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
return 0;
}
9、由于Boost的Bug问题,写段程序,头文件,空间都引用正常,但编译时编译器却告知连接错误 LNK1104: cannot open file "libboost_regex-vc6-sgd-1_34_1.lib",这样可以通过修改Boost.Regx下相关lib文件的文件名改为 libboost_regex-vc6-sgd-1_34_1.lib(与错误里相同)即可。
10、再次vc里的编译,ok了,0 error(s), 0 warning(s)。

我在VC6.0中装了boost库,测试程序的时候出现错误,说不能打开stdafx.h文件? 这个不是boost的问题,在项目->GUI属性->c/c++->预编译头->创建/使用预编译头中选择创建预编译头-确定即可。

《vc6.0环境下编译Boost 1.34.1》:http://blog.sina.com.cn/s/blog_4bb397fa0100e12a.html
《vc6.0安装boost1.34.1》:http://student.csdn.net/space.php?uid=119638&do=blog&id=36485

❾ 邮编的正则表达式

代码如下:

package TestRegex;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Test01 {

/**

* 邮政编码正则:"^[1-9]\d{5}$"

* ^:正则开始符

* $:正则结束符

* [1-9]:范围为1-9

* :转移字符

* d:数字【0-9】

* X{n}:恰好n次:注意从0开始

*/

public static void main(String[] args) {

//定义正则

String str= "^[1-9]\d{5}$";

//正确的邮件编码

String s = "471400";

//错误邮政编码

String s2 ="4560200";

/**

* Pattern为模式类型,

* compile(正则)方法预编译正则,

* 得到一个Matcher对象

*/

Pattern p =Pattern.compile(str);

//Pattern中的matcher()方法传入要匹配的字符串与正则进行匹配i

Matcher m=p.matcher(s);

Matcher m2=p.matcher(s2);

//Matcher类中的matches()方法判断是否匹配成功

boolean bo= m.matches();

boolean bo2= m2.matches();

//输出匹配结果:true为成功,false为失败

System.out.println(bo);

System.out.println(bo2);

}

}

(9)正则预编译扩展阅读

正则表达式简单语法及常用正则表达式:

基本符号:

^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)

$ 表示匹配字符串的结束位置

* 表示匹配 零次到多次

+ 表示匹配 一次到多次 (至少有一次)

? 表示匹配零次或一次

. 表示匹配单个字符

| 表示为或者,两项中取一项

( ) 小括号表示匹配括号中全部字符

[ ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]

{ } 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m

转义字符 如上基本符号匹配都需要转义字符 如 * 表示匹配*号

w 表示英文字母和数字 W 非字母和数字

d 表示数字 D 非数字

常用的正则表达式:

匹配中文字符的正则表达式:[u4e00-u9fa5]

匹配双字节字符(包括汉字在内):[^x00-xff]

匹配空行的正则表达式: [s|]*

匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*)/>/

匹配首尾空格的正则表达式:(^s*)|(s*$)

匹配IP地址的正则表达式:/(d+).(d+).(d+).(d+)/g//

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

❿ 求java 预处理网页用的正则表达式包括:匹配正文内容正则表达式

/(?<=<p>) .+? (?=\s*<\\/p>) /ixs

阅读全文

与正则预编译相关的资料

热点内容
如何重设服务器网关 浏览:862
世界经济pdf 浏览:106
异或算法找缺失的数 浏览:319
单片机flagt1 浏览:483
单片机清理 浏览:658
东风景逸空调压缩机 浏览:156
天津程序员炒股 浏览:228
pcl源码目录 浏览:966
python分类数据转换 浏览:107
wordpdf不能复制 浏览:960
快捷方式参数命令 浏览:110
cmd命令复制粘贴文件 浏览:582
ug实体快速修剪的命令是什么 浏览:123
软件工程对算法的要求 浏览:934
元史pdf 浏览:97
如何让服务器卡爆不用tnt 浏览:801
兵器pdf 浏览:925
云服务器怎么限制cpu 浏览:166
学信网用的什么app 浏览:878
linux重启命令apache 浏览:753