`
spyker
  • 浏览: 1341 次
  • 性别: 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)");
	}
}


分享到:
评论

相关推荐

    获取网页表格数据 正则表达式

    获取网页表格数据 &lt;tr&gt; &lt;td&gt;正则表达式 获取网页表格数据 &lt;tr&gt; &lt;td&gt;正则表达式

    正则表达式基础学习笔记

    正则表达式基础学习笔记!!!从基础开始正则表达式基础学习笔记!!!

    正则表达式学习入门到精通

    正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则表达式学习入门到精通正则...

    精通正则表达式.pdf

    电子版《精通正则表达式》精通正则表达式.pdf解压后5.78M。&lt;br&gt;正则表达式,不用介绍了吧,作为开发者的你掌握了吗?&lt;br&gt;&lt;br&gt;将自己收藏的精通正则表达式.pdf与大家分享下载使用&lt;br&gt;勇往直前:http://forward8.cn

    精通正则表达式(第三版)

    专家点评:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则...

    精通正则表达式(第三版)中文

    简介:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式...

    精通正则表达式中文版英文版_中文版为扫描版

    精通正则表达式中文版英文版_中文版为扫描版,英文版为电子版,愉快的下载吧小伙伴们

    精通正则表达式05

    javascript 正则表达式视频教程 包含:精通正则表达式五部视频,实战正则表达式两部视频和源码压缩包

    源码(精通正则表达式&实战正则表达式)

    javascript 正则表达式视频教程 包含:精通正则表达式五部视频,实战正则表达式两部视频和源码压缩包

    <<正则表达式系统教程>>

    关于正则表达式系统的教程 chm格式

    正则表达式学习笔记正则表达式学习笔记

    正则表达式学习笔记正则表达式学习笔记正则表达式学习笔记正则表达式学习笔记正则表达式学习笔记正则表达式学习笔记

    精通正则表达式 中英文

    《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域...

    正则表达式从入门到精通正则表达式从入门到精通

    正则表达式从入门到精通正则表达式从入门到精通正则表达式从入门到精通

    精通正则表达式(第3版) 英文版

    “毫不夸张地说,《精通正则表达式(第3版)》是学习该工具的不二选择,也是每个程序员必备的杰作。” ——Jason Menard, Java Ranch “所有关于正则表达式的书中,找不到比这更好的了。” ——Zak Greant, Planet ...

    精通正则表达式(第三版)

    专家点评:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则...

    精通正则表达式,有关正则表达式的所有应用

    正则表达式的所有应用都有哦·正则表达式+ASP,正则表达式+JSP,正则表达式+JAVASCRIPT等等

    精通正则表达式第三版(chm)

    精通正则表达式第三版(chm) 精通正则表达式第三版(chm)

    [精通正则表达式(第3版)]中文版.(美)Jeffrey.E.F.Friedl-part1.rar

    本书自第1版开始着力于教会读者“以正则表达式来思考”,来让读者真正“精通”正则表达式。该版对PHP的相关内容、Java1.5和Java1.6的新特性作了可观的扩充讲解。任何有机会使用正则表达式的读者都会从中获益匪浅。...

    [精通正则表达式(第三版)1

    [精通正则表达式(第三版)[精通正则表达式(第三版)

    精通正则表达式(第3版)

    《精通正则表达式(第3版)》自第1版开始着力于教会读者 “以正则表达式来思考”,来让读者真正“精通”正则表达式。该版对PHP的相关内容、Java1.5和Java1.6的新特性作了可观的扩充讲解。任何有机会使用正则表达式的...

Global site tag (gtag.js) - Google Analytics