正则表达式语法入门

正则表达式看不懂?本文介绍简单的正则表达式语法和几个简单的要点,帮助初学者来认识它。

首先是特殊字符的说明(看不懂没关系,下面会有解释):

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
要点一:注意三个字符的区分*\+\?

如e(abc)*这样的表达式能匹配的字符串最短是e,即*前面的表示式可以不出现,但如果是e(abc)+的话,最短匹配的字符串就是eabc了,即+前面的子表达式至少出现一次,其他的匹配还有eabcabc、eabcabcabc等。相应的e(abc)?这样的表达式,只能匹配eabc和e。

要点二:三种括号的区别

小括号表示一个表达式,如(0-9)匹配字符串"0-9";但这里如果换成中括号[0-9]则表示一个0到9的字符,比如0、1、2……,有多种匹配情况。大括号没有{0-9}这样的写法,通常用来表示匹配的长度,比如a{3,5}可以匹配aaa、aaaa、aaaaa,即表示长度为3到5的a字符串。

要点三:转义字符的使用

转义字符就是‘\’,比如一个字符串为abcd{ooo},用正则表达式可以表示为abcd\{o{3}\},o{3}表示三个o,但转义字符后面的符号就没有了特殊字符的含义,而可以作为普通字符使用。

有些诸如空格、回车这样看不见的东西也是通过转义字符来实现:

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
到现在为止,其实第一个表中还有一些需要进一步解释举例的内容,引出本文的最后一个部分,定位符:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

看看,有了这些定位符,我们就可以匹配诸如“work”、“apple”这样的独立单词了,因为定位符可以标记字符串的边界。

举几个例子就很清楚了。比如“^a[0-9]b$”,匹配以a开头、以b结尾、中间为一位数字的字符串,它可以匹配a0b、a4b、a5b等,但不能匹配c4b、a4d、e4t之类的内容。

要点四:\B和\b的区别

当我们需要找以app开头的字符串时,可以用“\bapp”来匹配,这样中间或结尾出现“app”的字符串就不会被匹配到。

\B的作用与\b相反,但又有不同。\Bapp表示app出现在单词非边界的位置,这时“\Bapp”和“app\B”是一样的。但“app\b”和“\bapp”不同,它只能匹配以app为结尾的单词。

要点五:^的不同含义

前面说到^表示字符串的开头位置,但在中括号表达式中它的意思就不一样了。比如“[^a]”匹配一个不是a的字符,它可以是除a以外的任何字符。

参考:

本文表格来自菜鸟教程

正则表达式1、 掌握正则表达式的基本用法 1.2. 正则表达式简介 1、 正则表达式是一个强大的字符串处理工具,可以对字符串进行、查找、提取、分割、替换等操作。它简单而且实用,是一个用于匹配字符串的模板,我们定义的任意的一个字符串都可以看成是一个正则表达式。 2、 String类也提供了几个和正则表达式有关的几个特殊方法 1) Boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。 2) String replaceAll(String regex,String replacement):返回该字符串中所有匹配正则表达式的子串,然后替换成replacement指定的字符串。 3) String replaceFirst(String regex,String replacement);返回该字符串中第一个匹配正则表达式的子串替换成replacement 后的新字符串。 4) String[] split(String regex)根据给定正则表达式拆分该字符串后得到的字符串数组。 3、 创建正则表达式正则表达式中使用的常见字符: 1) \t:制表符(‘\u0009’). 2) \n:换行(‘\u000A’)。 3) \r:回车(‘\u000d’) 4) …… 除此之外正则表达式中有一些特殊的字符,这些字符在正则表达式中有特殊的用途,如前面介绍的反斜线(\),如果需要匹配这些字符,必须首先将这些字符转义,也就是再前面添加一个反斜线(\).正则表达式中的特殊字符: 1)$:匹配一行的结尾。要匹配$自身用\$ 2)^:匹配一行的开头。要匹配^字符本身用\^. 3)():标记子表达式的开始位置和结束位置,要匹配这些字符用\(,\). 4)[]:确定中括号表达式的开始位置和结束位置。 例如:字符集 [abc]:表示内容可能是a、b、c字母中的任意一个。 [^abc]:表示内容不是a、b、c字母的任意一个 [a-zA-Z]:全部的英文字母 [0-9]:全部的数字 5){}:用于标记字表达式的出现额度。 {n}:出现正好n次。 {n,m}:出现n~m次 {n,}:出现n次以上。 6)*:指定前面表达式可以出现零次或多次。 7)+:指定前面表达式可以出现一次或多次。 8)?: 指定前面表达式可以出现零次或1次。 9).:匹配换行符\n之外的任何字符。 10)\:用于转义下一个字符 11)|:指定两项之间任选一项,如果要匹配|,请使用\| 上面的正则表达式依然匹配单个字符,这是因为还未在正则表达式中使用”通配符”,“通配符”是可以匹配多个字符的特殊字符。正则表达式中”通配符”远远超出了普通通配符的功能,它们被称为预定义字符:例如 1).:可以匹配任何字符 2)\d:匹配数字 3)\D:匹配非数字 4)\s:匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等 5)\S:匹配所有非空白字符 6)\w:匹配所有单词字符,包括0~9所有数字,26个英文字母和下划线(_) 7)\W:匹配所有非单词字符。 说明:上面的预定义字符:d是digit的意思,代表数字;s是space的意思,代表空白;w是word的意思,代表单词。d、s、w的大写形式恰好匹配与之相反的字符。 例如 :c\wt 可以匹配cat,cbt,c0t,c9t等 \d\d\d-\d\d\d\-\d\d\d可以匹配000-000-000形式的电话号码。 \\d{3}-\\d{3}-\\d{3} 正则表达式还支持圆括号表达式,圆括号表达式用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符(|),例如正则表达式 “(public|protected|private)”用于匹配Java三个访问控制符其中之一。 4、 使用正则表达式 一旦程序中定义了正则表达式之后,就可以使用Pattern和Matcher来使用正则表达式。 Pattern对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象,执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。 例如:典型的调用顺序 //将一个字符串编译成Pattern对象 Pattern p=Pattern.complie(“a*b”); //使用Pattern对象创建Matcher对象 Matcher m=p.matcher(“aaaab”); Boolean b=m.matchers();//返回true. 上面的Pattern对象可以重复使用多次,如果某个正则表达式仅需一次使用,可直接使用Pattern类的静态matches方法,此方法自动把指定字符串编译成匿名的Pattern对象,并执行匹配。 Boolean b=Pattern.matches(“a*b”,”aaaab”);//返回true. 5、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值