當前位置:首頁 » 編程軟體 » 正則表達式預編譯

正則表達式預編譯

發布時間: 2023-05-24 21:55:45

❶ 在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("")); } }

-

❷ 如何防止sql注入

對於jsp而言我們一般採取一下策略來應對:

1、PreparedStatement
如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替Statement.
以下是幾點原因
1)、代碼的可讀性和可維護性.
2)、PreparedStatement盡最大可能提高性能.
3)、最重要的一點是極大地提高了安全性.
到目前為止,有一些人(包括本人)連基本的惡義SQL語法都不知道.
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我們把[' or '1' = '1]作為name傳入進來.密碼隨意,看看會成為什麼?
select * from tb_name = 'or '1' = '1' and passwd = '隨意' ;
因為'1'='1'肯定成立,所以可以任何通過驗證.更有甚者:
把['; drop table tb_name; ]作為varpasswd傳入進來,則:
select * from tb_name = '隨意' and passwd = ''; drop table tb_name; 有些資料庫是不會讓你成功的,但也有很多資料庫就可以使這些語句得到執行.
而如果你使用預編譯語句.你傳入的任何內容就不會和原來的語句發生任何匹配的關系.(前提是資料庫本身支持預編譯,但上前可能沒有什麼服務端資料庫不支持編譯了,只有少數的桌面資料庫,就是直接文件訪問的那些只要全使用預編譯語句,你就用不著對傳入的數據做任何過慮.而如果使用普通的 statement,有可能要對drop,; 等做費盡心機的判斷和過慮.

2、正則表達式
2.1、檢測SQL meta-characters的正則表達式 /(\%27)|(\')|(\-\-)|(\%23)|(#)/ix
2.2、修正檢測SQL meta-characters的正則表達式 /((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-) |(\%3B)|(:))/i
2.3、典型的 SQL 注入攻擊的正則表達式 /\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\ ))/ix
2.4、檢測SQL注入,UNION查詢關鍵字的正則表達式 /((\%27)|(\'))union/ix(\%27)|(\') - 單引號和它的hex等值union - union關鍵字。
2.5、檢測MS SQL Server SQL注入攻擊的正則表達式 /exec(\s|\+)+(s|x)p\w+/ix

3、字元串過濾
public static String filterContent(String content){
String flt ="'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|; |or|-|+|,";
Stringfilter[] = flt.split("|");
for(int i=0; i {
content.replace(filter[i], "");
}
return content;
}

4、不安全字元屏蔽
本部分採用js來屏蔽,起的作用很小,這樣用屏蔽關鍵字的方法雖然有一定作用,但是在實際應用中這些 SQL的關鍵字也可能成為真正的查詢關鍵字,到那是被你屏蔽了那用戶不是不能正常的使用了。 只要在代碼規范上下點功夫就可以了。
凡涉及到執行的SQL中有變數時,用JDBC(或者其他數據持久層)提供的如:PreparedStatement就可以 ,切記不要用拼接字元串的方法就可以了.
功能介紹:檢查是否含有"'","\\","/"
參數說明:要檢查的字元串
返回值:0:是 1:不是
函數名是
function check(a)
{
return 1;
fibdn = new Array ("'" ,"\\","/");
i=fibdn.length;
j=a.length;
for (ii=0; ii { for (jj=0; jj

{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem'; p1==temp2)
{ return 0; }
}
}
return 1;
}

❸ 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

❹ 正則化 到底指什麼

由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字元串。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。

❺ 正則表達式中/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

(5)正則表達式預編譯擴展閱讀:

特點

正則表達式的特點是:

1、靈活性、邏輯性和功能性非常強;

2、可以迅速地用極簡單的方式達到字元串的復雜控制。

3、對於剛接觸的人來說,比較晦澀難懂。

由於正則表達式主要應用對象是文本,因此它在各種文本編輯器場合都有應用,小到著名編輯器EditPlus,大到Microsoft Word、Visual Studio等大型編輯器,都可以使用正則表達式來處理文本內容。

熱點內容
格來雲伺服器到期 發布:2025-02-14 06:48:43 瀏覽:904
訂奧迪A7哪個配置比較好 發布:2025-02-14 06:44:23 瀏覽:139
spss的資料庫 發布:2025-02-14 06:37:32 瀏覽:119
sql除法運算 發布:2025-02-14 06:30:43 瀏覽:534
如何在家部署一台伺服器 發布:2025-02-14 06:22:04 瀏覽:433
u盤里文件夾是空的 發布:2025-02-14 06:13:22 瀏覽:803
安卓如何縮放圖片尺寸 發布:2025-02-14 06:06:34 瀏覽:116
六年級簡便演算法題 發布:2025-02-14 05:53:02 瀏覽:8
腳本精靈要root嗎 發布:2025-02-14 05:51:30 瀏覽:212
安卓手機如何錄屏怎麼去掉觸摸顯示 發布:2025-02-14 05:36:23 瀏覽:996