❶ 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