2012年/09月/03日

首页回退

正则笔记

历史

正则表示式这一概念最早可以追溯到20世纪40年代的两个神经物理学家Warren McCulloch与Walter Pitts,他们将神经系统中的神经元描述成小而简单的自动控制元;
紧接着,在50年代,数学家1950年代,数学家Stephen Kleene利用称之为正则集合的数学符号来描述此模型,并且建议使用一个简单的概念来表示,
于是regular expressions就正式登上历史舞台了。

1968年,Ken Thompson发表了Regular Expression Search Algorithm, 紧接着
大神Thompson根据这个论文实现了Unix上编辑器ed的前身qed

1986年,POSIX(Portable Operating System Interface)标准

OSIX规范分为基本正则表达式BRE(Basic Regular Expressions)和扩展正则表达式

现在的编程语言中的正则表达式,大部分都属于PCRE这个分支, Perl兼容正则表达式,Perl Compatible Regular Expressions

数学定义

链接

三种运算

 并
 串接
 闭包

实例

组,引用

// Removes whitespace between a word character and . or ,
String pattern = "(\\w)(\\s+)([\\.,])";
System.out.println(EXAMPLE_TEST.replaceAll(pattern, "$1$3"));


// Extract the text between the two title elements
pattern = "(?i)(<title.*?>)(.+?)()";
String updated = EXAMPLE_TEST.replaceAll(pattern, "$2");

Java String

s.matches("regex")
s.split("regex")
s.replaceFirst("regex"), "replacement"
s.replaceAll("regex"), "replacement"

Pattern class

static Pattern compile(String regex)
Matcher matcher(CharSequence input)
static boolean matches(String regex, CharSequence input)
String[] split(CharSequence input)
String pattern()

Matcher class

boolean matches()
boolean find()
boolean find(int start)
String group()
int start()
int end()
int groupCount()