匹配规则篇
一、句点符号:.
句点符号匹配所有字符,包括空格、Tab字符甚至换行符;
例:正则表达式 b.n 匹配:bon,btn,bin,bbn,bcn等等
二、方括号符号:[]
方括号内指定匹配符号的范围,只能匹配单个字符;
例:正则表达式 b[oti]n 只能匹配:bon,btn,bin
三、“或”符号: |
“|”操作符的基本意义就是“或”运算
例: 正则表达式 b(o|t|i|oo)n 除了匹配:bon,btn,bin外,还能匹配boon。圆括号()可以用来分组
四、连字符:-
表示一个范围,比如:0到9,a到z 例:[0-9]{2} 表示2个0到9之间的数字
如果一个字符的格式是:888-8888-88888,不限于8,只要是数字,是这种格式,正则表达式应该写成:
[0-9]{3}\-[0-9]{4}\-[0-9]{5} 在这里用\进行转义,如果不转义,则会当成连字符
五、匹配字符数量的限制:以下符号用来表示紧靠该符号左边的符号出现的次数:
* 0次或多次 + 1次或多次 ? 0次或1次 {n} 只能出现正好n次 {n,m} 出现次数在n到m数之间
六、非符号:^
^用在[]内表示否定的意思,不能是什么字符
[^A][a-z]{5} 表示6个字符,第一个字符是除A以外的任何字符,第二到第六个字符必须是a到z之间的字符
七、圆括号和空白符号:
第三条说过,()是分组符号,而“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符
八、常见符号:
\d 等同于 [0-9]
\D 等同于 [^0-9]
\w 等同于 [A-Z0-9]
\W 等同于 [^A-Z0-9]
\s 等同于 [\t\n\r\f]
\S 等同于 [^\t\n\r\f]
常规应用篇
一、邮政编码:
boolean checkPostcode(){
Pattern p=Pattern.compile("[0-9]{6}");
Matcher m=p.matcher(inputStr);
if (!m.matches()){
System.out.println("****邮政编码格式不符!*****");
return false;
}
return true;
}
java.util.regex中有两个类:Pattern和Matcher,Pattern为模板,Matcher为被匹配者。
二、Email:
boolean checkEmail(){
Pattern p=Pattern.compile("[0-9A-Za-z]+@([0-9a-zA-Z]+.){1,2}(com|net|cn|com.cn)");
Matcher m=p.matcher(inputStr);
if(!m.matches()){
System.out.println("****电子邮件格式不符!*****");
return false;
}
return true;
}
注:(com|net|cn|com.cn)只允许这几种后缀的域名,如果实际应用中不限于这几种后缀域名,此处需要改动
三、IP地址:
boolean ipValid(String s) {
String regex0="(2[0-4]\\d)" + "|(25[0-5])";
String regex1="1\\d{2}";
String regex2="[1-9]\\d";
String regex3="\\d ";
String regex="("+regex0+")|("+regex1+")|("+regex2+")|("+regex3+")";
regex="("+regex+").("+regex+").("+regex+").("+regex+")";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
return m.matches();
}
四、相关应用:
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:JS中计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
五、利用正则表达式限制网页表单里的文本框输入内容:注意单引号和双引号的嵌套,括号内是单引号
只能输入中文:
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
只能输入全角字符:
onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"
只能输入数字:
onkeyup="value=value.replace(/[^\d]/g,'')"
只能输入数字和中文:
onkeyup="value=value.replace(/[\W]/g,'')
六、正则表达式在java中的相关应用:
/**
* 得到文件所在的磁盘目录
* @param file
* @return
*/
public static String getFileDirectory(String file){
String regEx = "[a-zA-z]{1,4}:.*[\\\\/]";
String dir = "";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(file);
if(m.find()){
dir = m.group(m.groupCount());
}
return dir;
}
/**
* 得到文件名
* @param file
* @return
*/
public static String getFileName(String file){
String regEx =".+[\\\\|/](.+)$";
String fileName = "";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(file);
if(m.find()){
fileName = m.group(m.groupCount());
}
return fileName;
}
/**
* 得到文件扩展名
* @param file
* @return
*/
public static String getFileExtName(String file){
String regEx = ".*\\.";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(file);
String extName = m.replaceAll("");
return extName;
}
/**
* 得到html标签的属性
* @param html 文件内容
* @param label 要提取属性的标签名称,如:font ,img...
*/
public static void getHtmlAttribute(String html,String label){
Map<String,String> mapAttrib = new HashMap<String,String>();
String regEx = "<"+label+"\\s*([^>]*)\\s *>";
String regEx2 = "([a-z]+)\\s*=\\s*\"([^\"]+)\"";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(html);
if(m.find()){
String attribs = m.group(1);
p = Pattern.compile(regEx2);
m = p.matcher(attribs);
while(m.find()){
mapAttrib.put(m.group(1), m.group(2));
}
}
printMapData(mapAttrib);
}
public static void printMapData(Map map){
Set entries = map.entrySet();
Iterator iter = entries.iterator();
while(iter.hasNext())
{
Map.Entry entry = (Map.Entry)iter.next();
System.out.println(entry.getKey()+"="+entry.getValue());
}
}
/**
* 使用Jacob工具包完成word到html的转换
* @param absPath 文件绝对路径
*/
public static boolean wordFormatToHtml(String absPath) throws ProgramException{
String FileFormat = "";
FileFormat = getFileExtName(absPath);//文件类型
if(FileFormat.equalsIgnoreCase("doc"))
{
String DocFile = absPath;
//word文件的完整路径
String HtmlFile = DocFile.substring(0, (DocFile.length() - 4)) + ".htm";
//html文件的完整路径
ActiveXComponent app = new ActiveXComponent("Word.Application");
//启动word
try{
app.setProperty("Visible", new Variant(false));
//设置word程序非可视化运行
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{DocFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
//打开word文件
Dispatch oWordBasic = (Dispatch) Dispatch.call(app, "WordBasic").getDispatch();
Dispatch.call(oWordBasic, "AcceptAllChangesInDoc");
Dispatch.invoke(doc,"SaveAs",Dispatch.Method, new Object[]{HtmlFile,new Variant(8)}, new int[1]);
//作为htm格式保存文件
Dispatch.call(doc, "Close",new Variant(false));
//关闭文件
}
catch (Exception e)
{
throw new ProgramException("error$Word转换为HTML时出错!");
}
finally
{
app.invoke("Quit", new Variant[] {});
//退出word程序
}
//转化完毕
return true;
}
return false;
}
/**
* 逐行读取HTML文件内容
* @param filePath HTML文件的路径
* @return
* @throws ProgramException
*/
public static String getHTMLContent(String filePath) throws ProgramException{
StringBuffer sb=new StringBuffer();
try{
String line="";
File file=new File(filePath);
InputStreamReader read = new InputStreamReader (new FileInputStream(file));
BufferedReader br=new BufferedReader(read);
while((line=br.readLine())!=null){
sb.append(line);
sb.append('\n');//注意换行符写入
}
}catch(FileNotFoundException e){
throw new ProgramException("error$读HTML文件时,文件没有找到");
}catch(IOException e){
throw new ProgramException("error$读HTML文件时,出现IO异常");
}
String temp=sb.toString();
//不管图片
String regEx = "<img\\s*([^>]*)\\s*>";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(temp);
temp=m.replaceAll("");
String regEx2 = "<v:imagedata\\s*([^>]*)\\s*>";
Pattern p2 = Pattern.compile(regEx2);
Matcher m2 = p2.matcher(temp);
temp=m2.replaceAll("");
temp = temp.replace("\'", "\"");
return temp;
}
分享到:
相关推荐
【正则表达式速成课程】是一门针对微软.NET Framework和ASP.NET的软件开发课程,主要讲解了如何使用正则表达式这一强大的文本处理工具。正则表达式能够用于验证用户输入、查找字符串中的模式以及进行复杂的文本格式...
非常棒的正则表达式速成教程,号称30分钟叫你学会正则表达式常用用法。我本人学了一下,感觉不赖,不过俺比较笨,30分钟的东西学了3个多小时,已经从什么都不会变成会编各种复杂的正则筛选条件了^^!这个教程是配合...
通过阅读《正则表达式参考.chm》、《正则表达式系统教程.CHM》、《正则表达式30分钟入门教程.mht》和《正则表达式.pdf》这些文档,你可以深入理解并熟练运用正则表达式。实践中不断尝试和调试,将使你的正则表达式...
好东西才与大家分享!这是博客园一位老师的正则表达式教学笔记,很精炼的阐述,看了你一定不后悔……
正则表达式10分钟速成指南 正则表达式是计算机科学领域中的一种模式匹配语言,用于描述字符串的模式。它是由一串特殊字符组成的规则,通过这些规则可以匹配、检索和操作字符串。正则表达式的应用非常广泛,涵盖文本...
### 正则表达式速成知识点详解 #### 一、正则表达式基础概念 正则表达式(Regular Expression)是一种强大的文本处理工具,能够帮助我们实现字符串的搜索与替换等操作。它由一系列用于匹配字符串中的字符组合的...
快速入门学习正则表达式,内容较为全面,讲解细致,新手必读
- **注意事项**:学习正则表达式需要一定的耐心,不要试图在短时间内速成,而是应该逐步理解和实践。 #### 3. 元字符 - **定义**:正则表达式中的特殊字符,具有特定的意义。 - **示例**: - `.`:匹配除换行符外...
Python零基础速成班,适用于入门或初级学习人群,采用Jupyter Notebook原装教程,.ipynb格式拷贝到Jupyter Notebook目录下即可运行,网页交互式可视化Python编程,全中文注解,下载即用,对初学者非常友好,也可作为...
最近因为有一个项目需要从普通的服务器移植到SAE,而SAE的thinkphp文件结构和本地测试的有出入,需要把一些html和js的引用路径改成SAE的形式,为了不手工改,特地速成了一下Python的正则表达式和文件操作。...
3. **字符串和正则表达式**:讲解字符串操作函数和强大的正则表达式匹配功能,这是Perl处理文本的核心。 4. **文件和目录操作**:如何读写文件、追加内容、遍历目录等,这对于系统管理和自动化任务非常重要。 5. *...
使用比较、正则表达式、全文搜索等过滤数据 连接关系数据 创建和更改表 插入、更新和删除数据 利用存储过程和触发器的强大功能 使用视图和游标 管理事务处理 创建用户帐户并通过访问控制管理安全性
本书会提供一个正则表达式的速成课程,以及基础和搜索与替换的具体应用。 最后,书中还会介绍Emacs的帮助系统和配置系统,这些是学习高级Emacs使用技巧的基础。Emacs帮助系统提供了丰富的文档和指南,可以帮助用户...
的描述与识别、有限自动机和正则表达式。在语法分析部分,介绍了上下文无关文法、文法 转换、自下而上的语法分析、LR 分析法。在语法制导翻译部分,介绍了语法制导思想和语 法制导定义。 通过本套课程的学习,你将...
- **正则表达式**:Perl中的正则表达式功能强大,支持复杂的文本匹配和替换操作。 - **匹配操作符**:`m//`和`//`操作符用于匹配正则表达式。 - **替换操作**:`s///`操作符用于在字符串中执行基于正则表达式的替换...
day01-java开发前奏 day02变量、关键字 day03 流程控制语句 day04-函数与数组 day05-day09面向对象 day10-JavaAPI day11线程 day12-day15集合 day17JDK5.0新特性与正则表达式 day18-day21.IO 附赠Java进阶知识
8. "正则表达式30分钟入门教程-V2.33.pdf" 是关于正则表达式的速成教程,虽然不是直接与C语言相关,但正则表达式在文本处理和字符串操作中经常用到,是程序员必备的技能之一。 综上所述,这个压缩包是一个全面的...
4. **正则表达式**:Perl的正则表达式是其强大之处,包括匹配、替换和分割等操作,以及各种元字符和修饰符的使用。 5. **文件和目录操作**:打开、关闭、读写文件,文件指针操作,目录遍历和管理。 6. **模块和...