当前位置:首页 » 编程软件 » 正则表达式预编译

正则表达式预编译

发布时间: 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