8.1.6 正则表达式及字符串的替换与分解

来源:互联网 发布:js中display的值 编辑:程序博客网 时间:2024/05/18 02:52

8.1.6 正则表达式及字符串的替换与分解

1.正则表达式

2.字符串的替换

3.字符串的分解


1.正则表达式

正则表达式是一些具有特殊意义字符的字符串,这些字符串称作正则表达中的元字符

"\\dcat"/*\\d就是有特殊意义的元字符,代表0~9之间任何一个。字符串"0cat"、"1cat"、"2cat"···"9cat"都是正则表达式"\\dcat"匹配的字符串*/

字符串对象调用public boolean matches(String s)可以判断当前字符串对象是否和参数s指定的正则表达式匹配

常用元字符及其意义 元字符在正则表达式中的写法意义\d\\d代表0~9任何一个数字\D\\D代表任何一个非数字字符\s\\s代表空格类字符:'\t'、'\n'、''、'\x0B'、'\f'、'\r'\S\\S代表非空格类字符\w\\w代表可以用于标识符的字符(不包括美元符号)\W\\W代表不能用于标识符的字符\p{Lower}\\p{Lower}小写字母[a~Z]\p{Upper}\\p{Upper}大写字母[A~Z]\p{ASCLL}\\p{ASCLL}ASCLL字符\p{Alpha}\\p{Alpha}字母\p{Digit}\\p{Digit}数字字符,即[0~9]\p{Alnum}\\p{Alnum}字母或者数字\p{Punct}\\p{Punct}标点符号:!"#$%&'()*+,-/:;<=>?@[\]^_`{|}~\p{Graph}\\p{Graph}可视符号:\p{Alnum}\p{Punct}\p{Print}\\p{Print}可打印字符:\p{Print}\p{Blank}\\p{Blank}空格或者制表符[\t]\p{Cntrl}\\p{Cntrl}控制字符:[\x00-x1F\x7F]·           ·                        代表任何一个字符                          

//例子:regex = "[159]ABC" //"1ABC"、"5ABC"、"9ABC"都是regex匹配的字符串

[abc]:代表a、b、c中的任何一个;

[^abc]:代表除了a、b、c以外的任何字符;

[a~zA~Z]:代表英文字母(包括大小写)中的任何一个;

[a~d]:代表a~d中的任何一个;

中括号里允许嵌套中括号,可以进行并、交、差运算,例如:

[a~d[m~p]]:代表a~d,或者m~p中的任何字符(并);

[a~z&&[def]]:代表d、e、f中的任何一个(交);

[a~f&&[^bc]]:代表a、d、e、f(差);


正则表达式可以使用修饰限定符:

regex = “hello[2468]?”;"hello"、"hello2"、"hello4"、"hello6"、"hello8"都与b正则表达式regex匹配的字符串

限定符模式意义X?X出现0次或者1次X*X出现0次或者多次X+X出现1次或者多次X{n}X恰好出现n次X{n,}X至少出现n次X{n,m}X出现n次或者m次XYX的后缀是YX|YX或者Y

public static void main(String[] args) {// TODO Auto-generated method stubString string = "[a-zA-Z]+";System.out.println("请输入字符并按回车键结束");Scanner scanner = new Scanner(System.in);String string2 = scanner.nextLine();if (string2.matches(string)) {System.out.println("“"+string2 + "”中的字符都是英文字母");}else {System.out.println("“"+string2 + "”中的字符不是英文字母");}}}/*请输入字符并按回车键结束wwwwwwwwwww“wwwwwwwwwww”中的字符都是英文字母*/



2.字符串的替换

字符串对象调用public String replaceAll(String regex,String replacement)方法返回一个字符串,该字符串是将当前字符串中所有和参数regex指定的正则表达式匹配的自字符串用参数replacement指定的字符串替换后的字符串

String s = "123hello789bird".replaceAll("[a-zA-Z]+","你好");//s=123你好789你好

public class Example8_10 {public static void main(String[] args) {// TODO Auto-generated method stubString string = "欢迎大家访问http://www.xiaojiang.cn了解、参观公司";String string2 = "(http://|www)\56?\\w+\56{1}\\w+\\56{1}\\p{Alpha}+";System.out.printf("替换\n\"%s\"\n中的网站链接信息后得到的字符串:\n", string);string = string.replaceAll(string2, "******");System.out.println(string);String money = "89,235,678$";System.out.println(money + "转化为数字:");String string3 = money.replaceAll("[,\\p{Sc}]", "");// \\p{Sc}可以匹配任何字符Long number = Long.parseLong(string3);System.out.println(number);}}/*替换"欢迎大家访问http://www.xiaojiang.cn了解、参观公司"中的网站链接信息后得到的字符串:欢迎大家访问http://www.xiaojiang.cn了解、参观公司89,235,678$转化为数字:89235678*/


3.字符串的分解

public String[ ] split(String regex)

字符串调用该方法的时候,使用参数指定的正则表达式regex作为分隔标记分解出其中单词,并将分解的单词存放在字符串数组中。

public class Example8_11 {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("一行文本:");Scanner reader = new Scanner(System.in);String string = reader.nextLine();String string2 = "[\\s\\d\\p{Punct}]+";String words[] = string.split(string2);for (int i = 0; i < words.length; i++) {int m = i + 1;System.out.println("单词" + m + ":" + words[i]);}}}
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #00cf90}

一行文本:

哈哈哈123哈手把手samdnsad

单词1:ha

单词2:ha

单词3:哈哈哈

单词4:哈手把手samdnsad








原创粉丝点击