一:元字符 和普通字符
元字符具有特殊的含义,例如
\d
匹配任意数字字符,\w
匹配任意字母数字字符,.
匹配任意字符(除了换行符)等。
普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。
二 量词
* _____+______?_______{n}_________{n,}_______{n,m}
* : 意思是 匹配前面的模式零次或多次。
+: 意思是 匹配前面的模式一次或多次 。
?:意思是 匹配前面的模式零次或一次。
{n} : 意思是 匹配前面的模式恰好 n 次。
{n,} : 意思是 匹配前面的模式至少 n 次。
{n,m} :意思是 匹配前面的模式至少 n 次且不超过 m 次。
三 字符类
[ ]
:匹配括号内的任意一个字符。例如,[abc]
匹配字符 "a"、"b" 或 "c"。
[^ ]
:匹配除了括号内的字符以外的任意一个字符。例如,[^abc]
匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
四 边界匹配
^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词边界。\B
:匹配非单词边界。
五 分组和捕获
( )
:用于分组和捕获子表达式。
(?: )
:用于分组但不捕获子表达式。
六 特殊字符
\
:转义字符,用于匹配特殊字符本身。
.
:匹配任意字符(除了换行符)。| :用于指定多个模式的选择。
七 发展历史
正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。
随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
八 应用领域
目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
九 使用规则
^ 为匹配输入字符串的开始位置。
[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。
abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。