`
spyker
  • 浏览: 1388 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

<精通正则表达式>学习笔记(一)

阅读更多
今天上午翻了一下自己无聊学习了一个月的正则表达式,忽然发现好多的都忘记了.
所以现在打算温习下,顺表做个笔记.
打算写一个系列,努力去坚持.
基本按照书本章节来写
start:

第一章 正则表达式入门
   作为对程序员来说,一些描述性,摘要性的东西我就不多说了.作为一个笔记类的文章,我大概在里面写一些自己在学习过程中觉得应该注意的,或者比较重点的东西.当然,很多都是自己主观的,大家有意见可以提出.
   在这本书中,作者很推崇perl,我看了之后,觉的perl真的是很适合去做正则的一些工作.但是自己perl基本是只是熟悉语法,遗憾...只有慢慢学习了!

进入技术性学习:

1:行的起始和结束 ^ $
2:字符组 是以[]作为字符组的 比如[ab]
  注意:在字符组内部,字符组元字符-表示一个范围
eg:[a-z]
3:排除性字符走 [^ab]
  注意:排除型字符组表示"匹配一个未列出的字符",而不是"不要匹配列出的字符"

4:点号匹配任意字符
5:多选结构
  ...|...|...
  在这里作者提到了多选结构和字符组的一个有点搞的东西,自己在第一次看的时候也被弄忽悠了,作者最后在后面解释:
一个字符组只能匹配目标文本的单个字符,而每个多选结构自身都可能是完整的正则表达式,都可以匹配任意长度的文本.
ps:我在后面看到,正则中的条件判断,类似java中的三目运算符,可以模拟多选
6:忽略大小写
这个自己觉的很有用,刚刚入行的时候,想用这个功能,问了很多人,都不知道...
暂时先给出一个egrep的例子,后面仔细描述
egrep -i 'a' abbba (暂时未测试)
7:单词边界  \<(起始) \>(结束) \B \b
8:可选项元素 ? colou?r 这个u可以出现,也可以不出现.出现频率最多出现一次.类似实现方式有colou{0,1}r
9:重复出现
+ 一次或多次 至少一次
* 零次或多次 最少零次
10:区间
{min.max}
11:捕获以及反向引用
解释 捕获:一般正则表达式中括号中匹配内容会被捕获,也就是被规则引擎保存
      反向引用:对捕获的内容,进行引用
eg:\<([A-Za-z])+\1\>  [A-Za-z] 是被捕获内容  \1是对它的反向引用
注:各个语言中的捕获,以及反向引用可能实现方式不同,但是概念是一样的
12:转义 \char

附上java的一个简单代码,对上面的进行简单代码实现.
package com.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class RegularTest {

	/**
	 * 简单匹配
	 * 
	 * @param testString
	 *            测试字符
	 * @param regular
	 *            测试正则表达式
	 */
	private static void MarchRegular(final String testString,
			final String regular) {
		Pattern pattern = Pattern.compile(regular);
		Matcher marcher = pattern.matcher(testString);

		System.out.print(regular + "匹配" + testString + ":");
		if (marcher.find()) {
			System.out.println("OK");
		} else {
			System.out.println("NG");
		}
	}

	/**
	 * 捕获及反向引用
	 * 
	 * @param testString
	 *            测试字符
	 * @param regular
	 *            测试正则表达式
	 */
	private static void MarchGroup(final String testString, final String regular) {
		Pattern pattern = Pattern.compile(regular);
		Matcher matcher = pattern.matcher(testString);

		if (matcher.find()) {
			System.out.print(regular + "匹配" + testString + "OK");
			int groupCount = 0;
			groupCount = matcher.groupCount();
			for (int i = 0; i < groupCount; i++) {

				System.out.print("第" + i + "个捕获值为:" + matcher.group(i + 1));
			}
		} else {
			System.out.print(regular + "匹配" + testString + "NG");
		}
	}

	public static void main(String[] args) {
		/*
		 * ^ $
		 */
		MarchRegular("abb", "^a*b$");
		MarchRegular("abbc", "^a*b$");
		/*
		 * [ab]
		 * 
		 */
		MarchRegular("a", "[abc]");
		MarchRegular("d", "[abc]");
		/*
		 * [^ab]
		 */
		MarchRegular("d", "[^abc]");
		MarchRegular("a", "[^abc]");
		/*
		 * 点号匹配任意字符
		 */
		MarchRegular("a", ".");
		/*
		 * 多选结构
		 */
		MarchRegular("a", "a|b|bc");
		MarchRegular("bc", "a|b|bc");
		MarchRegular("bd", "a|b|bc");
		MarchRegular("d", "a|b|bc");

		/*
		 * 忽略大小写 java中忽略大小写还有另一种写法,
		 * Pattern.compile的第二个参数:Pattern.CASE_INSENSITIVE)
		 * 
		 */
		MarchRegular("d", "(?i:D)");
		MarchRegular("D", "(?i:d)");

		/*
		 * 单词边界 \\b 这里\b是对应单词边界 \\b其中对\进行了转义
		 */
		MarchRegular("test", "\\btest\\b");
		MarchRegular("tes", "\\btest\\b");

		/*
		 * 可选项元素 ?
		 */
		MarchRegular("tes", "test?");
		MarchRegular("test", "test?");
		MarchRegular("tesm", "test?");

		/*
		 * + *
		 */
		MarchRegular("test", "test+");
		MarchRegular("testt", "test+");
		MarchRegular("tes", "test+");

		MarchRegular("test", "test*");
		MarchRegular("testt", "test*");
		MarchRegular("tes", "test*");
		MarchRegular("tess", "test*");
		MarchRegular("tem", "test*");

		/*
		 * 区间
		 */
		MarchRegular("m", "m{0,4}");
		MarchRegular("mm", "m{0,4}");
		MarchRegular("mmm", "m{0,4}");
		MarchRegular("mmmm", "m{0,4}");
		MarchRegular("mm", "m{3,4}");

		/*
		 * 捕获以及反向引用 java中反向引用采用 matcher.group(arg)
		 */
		MarchGroup("mmaa", "(m)(a)");
	}
}


分享到:
评论

相关推荐

    精通正则表达式(英文版+中文目录)

    《精通正则表达式》是一本深入探讨正则表达式的权威书籍,英文版结合中文目录,为学习者提供了便利。正则表达式是计算机科学中用于模式匹配和文本操作的强大工具,广泛应用于文本处理、数据提取、编程语言、网页爬虫...

    超经典正则表达式测试工具

    4. **学习正则的学习笔记**:可能包含一份详细的正则表达式学习资料,涵盖了基础概念如元字符、量词、字符类等,以及高级特性如分组、后向引用、预查等,方便用户系统学习。 5. **正则表达式参考手册**:可能提供了...

    精通qtp_自动化测试技术领航第三章学习笔记

    以上就是《精通qtp_自动化测试技术领航》第三章学习笔记的详细知识点,内容涵盖了正则表达式的使用、Html DOM的应用、数据库操作方法和QTP中打开网页的多种方法。通过这些知识点的学习,可以显著提升自动化测试...

    Java的2本经典

    这两本书结合在一起,可以为读者提供一个全面而深入的Java学习平台,不仅能够掌握Java编程的基础,还能精通正则表达式这一强大工具,从而在解决问题和开发项目时更加得心应手。无论是对Java初学者还是有经验的开发者...

    王纯业版python学习笔记

    《王纯业版Python学习笔记》是一本专为Python初学者设计的教程,作者王纯业以其简洁明了的写作风格,使得这本相对较为薄的书籍成为了初学者掌握Python编程的理想选择。这本书深入浅出地介绍了Python的基础知识,包括...

    php笔记之:文章中图片处理的使用

    文章最后推荐了一本关于正则表达式的书《精通正则表达式第三版》,作者是Jeffrey E. F. Friedl,余晟翻译。这本书对于深入学习正则表达式有很大的帮助。 ### 实际应用注意事项 在实际应用中,处理文章中的图片需要...

    elasticsearch学习笔记

    Elasticsearch学习笔记 Elasticsearch(以下简称ES)是当前最流行的搜索引擎之一,本文旨在通过对ES的基本操作和查询语法的介绍,帮助读者快速入门和精通ES。 批量操作 ES提供了多种批量操作方式,包括通过GET _...

    django学习笔记

    在urls.py文件中定义URL模式,并通过正则表达式或其他方式匹配请求。 5. **表单处理** Django提供了强大的表单处理能力,可以自定义表单类,自动处理数据验证、渲染HTML和处理POST数据。通过`forms.py`文件定义...

    韩顺平149集php从入门到精通笔记+其他资源

    - 正则表达式:学习正则表达式的语法,进行复杂字符串匹配和替换。 6. **文件与目录操作** - 文件读写:file_get_contents、fopen、fwrite、fclose等函数的应用。 - 目录操作:mkdir、rmdir、scandir等函数,...

    Java从零基础到精通详细笔记高清完整PDF版

    - `grep` 是一个强大的文本搜索工具,它能够使用正则表达式搜索文本,并把匹配的行打印出来。 - 管道(`|`)允许将一个命令的输出作为另一个命令的输入。 #### 系统信息 - `man` 命令提供命令的手册页,例如 `man ...

    Linux从入门到精通学习文档

    - `grep`: 在文件中搜索匹配正则表达式的行。 - `find`: 查找文件。 - **用户权限**: - 文件权限: 读(read)、写(write)、执行(execute)。 - 用户分类: 普通用户、超级用户(root)。 - 权限更改: `chmod`、`...

    LinuxPDF最全学习资料,从安装到大神,运维必备

    A第二章 Linux基本操作和自己动手组装服务器 B第三章 Linux基本命令操作 C第四章 文件的基本管理和XFS文件系统备份...V第二十三章 expect-正则表达式-sed-cut的使用 W第二十四章 Shell中色彩处理和awk使用技巧 。。。

    Python中文书籍.rar

    1. "Python学习笔记.pdf":这可能是一份个人或集体编写的Python学习笔记,通常会涵盖基础语法、常用库的使用、编程实践等方面,可能是初学者入门或进阶学习的好帮手。 2. "Dive Into Python中文版.rar":这是Python...

    深入java虚拟机源码-books-recommendation:后端进阶经典图书

    深入java虚拟机 源码 Catalog 奔跑吧 ANSIBLE 分布式服务架构....大型网站技术架构:核心原理与案例分析 ...精通正则表达式_中文版 Roy_Thomas_Fielding博士论文REST(中文版) 图解TCPIP TCP-IP详解 从PAXOS到ZOOKEEP

    韩顺平PHP(全149讲)课堂笔记

    7. **字符串与正则表达式**:掌握字符串操作函数和正则表达式的使用,进行文本处理和匹配。 【PHP进阶篇】 1. **面向对象编程**:讲解类、对象、属性、方法、继承、封装、多态等面向对象概念,以及抽象类和接口的...

    python 视频(入门到精通).rar

    8. **字符串处理**:掌握字符串的拼接、格式化、查找、替换等方法,以及正则表达式,这对于处理文本数据尤其有用。 9. **网络编程**:学习如何使用Python进行网络通信,如HTTP请求、套接字编程等。 10. **并发编程...

    Python小白到大牛-视频笔记

    《Python小白到大牛》是一本详尽的Python学习指南,旨在帮助初学者从零基础逐渐精通Python编程。这本书按照四个部分逐步展开:基础、进阶、实用库和项目实战,覆盖了Python语言的各个方面。 在第一篇Python基础中,...

    Python就业视频资料.rar

    学习者将学习到requests库用于发送HTTP请求,BeautifulSoup或PyQuery库解析HTML文档,以及使用正则表达式或lxml库进行数据提取。同时,了解如何处理反爬策略,如设置User-Agent、处理验证码和使用代理IP,以及存储和...

Global site tag (gtag.js) - Google Analytics