正则表达式就是以某种方式来描述字符串,可以说“如果一个字符串含有这些东西,那么它就是我正在找的东西。”
在java中,\的意思是“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。”
在正则表达式中,括号有着将表达式分组的效果,而竖直线|则表示或操作。
(-|\\+)?
: 这个正则表达式表示字符串的起始字符可能是一个-或+,或二者皆没有(因为后面跟着?修饰符)。因为字符+在正则表达式中有特殊的意义。所以必须使用\将其转义,使之成为表达式的一个普通字符String类自带非常有用的正则表达式工具—split()方法,其功能是“将字符串从正则表达式匹配的地方切开”。
public class TestOne {
public static String knights =
"Then, when you have found the shrubbery,you must " +
"cut down the mightiest tree in the forest..."+
"with.... a herring!";
public static void main(String[] args) {
split(" "); //按空格划分字符串
split("\\W+");//非单词字符一个或多个
split("n\\W+");//n开头非单词字符一个或多个
}
public static void split(String reges) {
System.out.print(
Arrays.toString(knights.split(reges))
);
}
}
替代
部分正则表达式
- 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。
元字符介绍
“^” :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。
” ": 会匹配行或字符串的结尾
“\b” :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中”This is Regex”匹配单独的单词 “is” 正则就要写成 “\bis\b” , \b 不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界
“\d”: 匹配数字,例如要匹配一个固定格式的电话号码以0开头前4位后7位,如0737-5686123 正则:^0\d\d\d-\d\d\d\d\d\d\d$ 这里只是为了介绍”\d”字符,实际上有更好的写法会在 下面介绍。
“\w”:匹配字母,数字,下划线. 例如我要匹配”a2345BCD__TTz” 正则:”\w+” 这里的”+”字符为一个量词指重复的次数,稍后会详细介绍。
“\s”:匹配空格 例如字符 “a b c” 正则:”\w\s\w\s\w” 一个字符后跟一个空格,如有字符间有多个空格直接把”\s” 写成 “\s+” 让空格重复
“.”:匹配除了换行符以外的任何字符,这个算是”\w”的加强版了”\w”不能匹配 空格 如果把字符串加上空格用”\w”就受限了,看下用 “.”是如何匹配字符”a23 4 5 B C D__TTz” 正则:”.+”
“[abc]”: 字符组 匹配包含括号内元素的字符 ,这个比较简单了只匹配括号内存在的字符,还可以写成[a-z]匹配a至z的所以字母就等于可以用来控制只能输入英文了
几种反义 : 写法很简单改成大写就行了,意思与原来的相反,这里就不举例子了
“\W” 匹配任意不是字母,数字,下划线 的字符
“\S” 匹配任意不是空白符的字符
“\D” 匹配任意非数字的字符
“\B” 匹配不是单词开头或结束的位置
“[^abc]” 匹配除了abc以外的任意字符
量词
- “a+”与”a*”不同在于”+”至少是一次而”*” 可以是0次
部分内容From : http://www.cnblogs.com/China3S/archive/2013/11/30/3451971.html
文章: http://www.regexlab.com/zh/regref.htm
匹配器:http://www.regexlab.com/zh/workshop.htm?pat=c&txt=abcde
1.普通字符:字母,数字,汉字,下划线,以及后面没有特殊定义的标点符号,都是“普通字符”。
表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符
2.简单的转义字符(\用法)
(1)一些不便书写的字符,采用在前面加”\”的方法
(2)还有一些有特殊用处的标点符号,在前面加”\”后,就代表该符号本身
比如:^,
都有特殊意义,如果想要匹配字符串中"′′和"
”字符,则表达式就需要写成”\^”和”$”。
3.能够与”多种字符”匹配的表达式
(1)可以匹配”多种字符”其中的任意一个字符。比如:表达式”\d”可以匹配任何一个数字。
4.自定义能够匹配“多种字符”的表达式
(1)使用方括号[]包含一系列字符,能够匹配其中任意一个字符。用[^]包含一系列字符,则能够匹配
其中字符之外的任意一个字符。
5.修改匹配次数的特殊符号
(1)”[bcd][bcd]”可以写成”[bcd]{2}”.
6.其他一些代表抽象意义的特殊符号
(1)一些符号在表达式中代表抽象的特殊意义
7.匹配次数中的贪婪和非贪婪
(1)贪婪:”\w+”,”*”,”{m,n}”在匹配的时候,总是尽可能多的匹配符合它规则的字符
(2)非贪婪:在修饰匹配次数的特殊符号后再加上一个”?”号,则可以使匹配次数不定的表达式尽可能少的匹配。
8.反向引用\1,\2…
(1)表达式在匹配时,表达式引擎会将小括号 “( )” 包含的表达式所匹配到的字符串记录下来。小括号包含的表达式所匹配到
的字符串可以单独获取。
(2)小括号包含的表达式所匹配到的字符串” 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。
9.预搜索,不匹配;反向预搜索,不匹配
(1)格式:”(?=xxxxx)”,在被匹配的字符串中,它对所处的 “缝隙” 或者 “两头” 附加的条件是:所在缝隙的右侧,
必须能够匹配上 xxxxx 这部分的表达式。
(2)格式:”(?!xxxxx)”,所在缝隙的右侧,必须不能匹配 xxxxx 这部分表达式。
1.当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围,比如:”(.?)”
2.在表达式 “\s”,”\d”,”\w”,”\b” 表示特殊意义的同时,对应的大写字母表示相反的意义
3.如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,那么可以在表达式的首尾使用 “^” 和 “
”,比如:”\d+
” 要求整个字符串只有数字。