3

java之正则表达式精选

 2 years ago
source link: https://blog.51cto.com/JavaArchitect/5645550
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

以平常之心,接受已发生的事。生活里再多的曲折,也不可以损失我们对人生的坚持。人生路上,分不清什么是不经意的忽略,可以原谅,也分不清什么是真正的不在意,需要离开。宽宽地活着,真的不赖

我们上一篇聊到了java之基本类型包装类,这一篇我们聊一下正则表达式,针对于以下的概念,都会有实体例子配合着,给大家演示,希望给历险中的你带来一些帮助!!!   

java之正则表达式精选_正则表达式

    正则表达式,又称规则表达式。计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”。

二.知识点介绍

    2、字符串中涉及正则的常用方法

    3、正则表达式的匹配规则

    4、精炼练习

三.知识点详解

    正则表达式(英语:Regular Expression,在代码中常简写为regex)。

    正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。

    正则表达式也是一个字符串,用来定义匹配规则。参照帮助文档,在Pattern类中有简单的规则定义,可以结合字符串类的方法使用。 

    String类中,使用正则表达式匹配完整字符串的方法为:

    publicboolean matches(String regex)    

    调用方法的字符串为被规则匹配的字符串

    regex字符串为匹配规则

    返回值为布尔型,符合规则返回true,不符合返回false 

    参照API文档后,我们简单了解了匹配规则,这里给出手机号与邮箱的匹配规则:

    邮箱规则:String  regex = ”\\w+@\\w{2,7}\\.\\w{2,3}”;

    手机号规则:String  regex = ”[1][3,4,5,7,8][0-9]{9}”;

    如:    String  data = “[email protected]”;

//邮箱规则
boolean result = data.matches(“\\w+@\\w{2,7}\\.\\w{2,3}”); //返回结果为true

String data2 = “itheima.cn”;
//手机号规则
boolean result2 = data2.matches(“\\w+@\\w{2,7}\\.\\w{2,3}”); //返回结果为false

代码演示:

package com.Test;

import java.util.Scanner;

public class Test{
private final static String name = "磊哥的java历险记-@51博客";
/*
* 简单正则表达式
*
* 正则表达式:匹配指定规则的字符串
*
* 判断一个字符串
* 1.长度大于等于5小于等于15
* 2.数字开头 不包含0
*
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个邮箱:");
String s = sc.nextLine();
boolean flag = check(s);
boolean flag2 = check2(s);
System.out.println("长度是否合格:"+flag);
System.out.println("是否是邮箱:"+flag2);
System.out.println("============="+name+"=============");
}
//正则判断是否是邮件
public static boolean check2(String s){
//这种方式也可以
// String regex="\w+@\w{2,7}\.\w{2,3}";
// boolean b =s.matches(regex);
// return b ;
boolean result = s.matches("\\w+@\\w{2,7}\\.\\w{2,3}");

return result;
}
//限制长度
public static boolean check(String s) {
boolean flag = true;
//判断长度
if(s.length()>=7&&s.length()<=20){
char c = s.charAt(0);
//判断数字开头 不包含0
if(!(c>='1' &&c<='9')){
flag = true;
}
}else{
flag = false;
}
return flag;
}
}
java之正则表达式精选_概念_02

2、字符串中涉及正则的常用方法

(1)public boolean matches(String regex)    //完整字符串匹配规则(判断字符串是否匹配给定的规则)

代码演示:

package com.Test;

import java.util.Scanner;

public class Test{
private final static String name = "磊哥的java历险记-@51博客";
/*
* public boolean matches(String regex) 判断调用方法的字符串与regex字符串是否匹配
*
* 字符类
* [abc] a、b 或 c(简单类)
* [^abc] 任何字符,除了 a、b 或 c(否定)
* [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
* 预定义字符类
* . 任何字符(与行结束符可能匹配也可能不匹配)
* \w 单词字符:[a-zA-Z_0-9]
* 26个字母大小写 数字 _
*
* \b 单词边界
* abc?bcda aaa!
* Greedy 数量词
* X? X,一次或一次也没有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
*
*/
public static void main(String[] args) {
String s ="aaaac";
String regex = "a{1,3}c";
boolean matches = s.matches(regex);
System.out.println("是否符合要求:"+matches);
System.out.println("============="+name+"=============");
}
}
java之正则表达式精选_代码_03

举例:校验qq号码

    1: 要求必须是5-15位数字

    2: 0不能开头

 代码演示:  

String qq_number = "11283223";

String regex = "[1-9][0-9]{4,14}";

boolean flag2 = qq_number.matches(regex);

举例:校验手机号码

    1:要求为11位数字

    2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。

 代码演示:

String phone = "18800022116";

String regex = "1[34578][0-9]{9}";

boolean flag = phone.matches(regex);

   (2)public String[] split(String regex) //将符合规则的字符串作为切割符切割

    (3)public String replaceAll(Stringregex,String replacement) //将符合规则的字符串替换为新字符串

代码演示:

package com.Test;

import java.util.Scanner;

public class Test{
private final static String name = "磊哥的java历险记-@51博客";
/*
* publicString[] split(String regex) //将符合规则的字符串作为切割符切割
* public String replaceAll(Stringregex,String replacement) //将符合规则的字符串替换为新字符串
*/

public static void main(String[] args) {
String girlName = "磊哥.java.历险记.@51博客 ";
String[]girlNames = girlName.split("\\.");
// System.out.println(girlNames[0]);
// System.out.println(girlNames[1]);
// System.out.println(girlNames[2]);
// System.out.println(girlNames[3]);
// System.out.println(girlNames[4]);
for(int i = 0; i < girlNames.length; i++) {
String string = girlNames[i];
System.out.println(string);
}
String replaceAll = girlName.replaceAll("java", "历险记");
System.out.println(replaceAll);
}
}
java之正则表达式精选_代码_04

举例:把文字中的数字替换成*

代码演示:

String s = "Hello12345World6789012";

String regex = "[0-9]";

String result = s.replaceAll(regex, "*");

3、补充内容:正则表达式的匹配规则

    参照帮助文档,在Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母。我们来学习语法规则。

    正则表达式的语法规则:

    (1)字符:x

    含义:代表的是字符x

    例如:匹配规则为 "a",那么需要匹配的字符串内容就是 ”a”

    (2)字符:\\

    含义:代表的是斜线字符'\'

    例如:匹配规则为"\\" ,那么需要匹配的字符串内容就是 ”\”

    (3)字符:\t

    含义:制表符

    例如:匹配规则为"\\t" ,那么对应的效果就是产生一个制表符的空间

    (4)字符:\n

    含义:换行符

    例如:匹配规则为"\\n",那么对应的效果就是换行,光标在原有位置的下一行

    (5)字符:\r

    含义:回车符

    例如:匹配规则为"\\r" ,那么对应的效果就是回车后的效果,光标来到下一行行首

    (6)字符类:[abc]

    含义:代表的是字符a、b 或 c

    例如:匹配规则为"[abc]" ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个

    (7)字符类:[^abc]

    含义:代表的是除了 a、b 或 c以外的任何字符

    例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符

    (8)字符类:[a-zA-Z]

    含义:代表的是a 到 z 或 A 到 Z,两头的字母包括在内

    例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母

    (9)字符类:[0-9]

    含义:代表的是 0到9数字,两头的数字包括在内

    例如:匹配规则为"[0-9]",那么需要匹配的是一个数字

    (10)字符类:[a-zA-Z_0-9]

    含义:代表的字母或者数字或者下划线(即单词字符)

    例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线

    (11)预定义字符类:.

    含义:代表的是任何字符

    例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现

    (12)预定义字符类:\d

    含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]

    例如:匹配规则为"\\d ",那么需要匹配的是一个数字

    (13)预定义字符类:\w

    含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]

    例如:匹配规则为"\\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线

    (14)边界匹配器:^

    含义:代表的是行的开头

    例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号

    (15)边界匹配器:$

    含义:代表的是行的结尾

    例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号

    (16)边界匹配器:\b

    含义:代表的是单词边界

    例如:匹配规则为"\\b[abc]\\b" ,那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])

    (17)数量词:X?

含义:代表的是X出现一次或一次也没有

例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有

(18)数量词:X*

含义:代表的是X出现零次或多次

例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有

(19)数量词:X+

含义:代表的是X出现一次或多次

例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a

(20)数量词:X{n}

含义:代表的是X出现恰好 n 次

例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a

(21)数量词:X{n,}

含义:代表的是X出现至少 n 次

例如:匹配规则为"a{5, }",那么需要匹配的内容是最少有5个字符a

(22)数量词:X{n,m}

含义:代表的是X出现至少 n 次,但是不超过 m 次

例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 到 8个字符a之间

(23)逻辑运算符:XY

含义:代表的是X后跟Y

例如:匹配规则为"ab",那么需要匹配的字符串内容就是 ”ab”

(24)逻辑运算符:X|Y

含义:代表的是X 或 Y

例如:匹配规则为"a|b",那么需要匹配的字符串内容就是 ”a”或”b”

(25)逻辑运算符:(X)

含义:代表的是()括号内的数据作为一组数据出现,(X)的方式称为正则表达式中的组

例如:匹配规则为"(hello)+",那么需要匹配的内容是组内数据要出现多次,如”hellohellohello”;或者组内数据出现一次,如”hello”。

    注意实现:

    在定义正则表达式的匹配规则字符串的里面,想再次使用组中的内容,可通过\\1来进行使用

    例如:正则表达式的匹配规则为"(a) == \\1";

    使用数据"a == a"进行匹配结果为true;使用数据"a == b"进行匹配结果为false。

4,精炼练习

匹配某一字符是否为QQ号。

4.1 题目

(1)匹配长度是否为5-10位

(2)匹配是否为数字

(3)不能以0开头

4.2 实验步骤

(1)声明一个类Test,并且创建两个数组

(2)使用正则表达式完成

代码演示:
package com.Test;

import java.util.Scanner;

public class Test {
private final static String name = "磊哥的java历险记-@51博客";
/*
* publicString[] split(String regex) //将符合规则的字符串作为切割符切割
* public String replaceAll(Stringregex,String replacement) //将符合规则的字符串替换为新字符串
*/

public static void main(String[] args) {
//测试:
String qq_number = "1832137835";
String qq_number2 = "789j9371";
boolean b1 = QQ(qq1);
boolean b2 = QQ(qq2);
System.out.println(qq1 + "-->是qq号码吗? -->" + b1);
System.out.println(qq2 + "-->是qq号码吗? -->" + b2);
System.out.println("============="+name+"=============");
}
public static boolean QQ(String qq){
//定义匹配规则:
String regex = "[1-9][0-9]{4,9}";
//判断是否符合规则
boolean b = qq.matches(regex);
return b;
}
}
java之正则表达式精选_正则表达式_05

如果人生总是—帆风顺,那人生也不会丰富多彩。时间上的距离也同样创造出幻象,希望永远都是在未来,你必须隔着一段时间的距离才能够看到它,它就像彩虹一样只能在远处被看到,但你无法真正捕捉到它

我会沿着java基础至中阶,高阶,和后面的实战项目,循序渐进,由浅入深,希望能够帮助看到我文章的兄弟们,特别是初学者!感谢大家持续关注!  

java之正则表达式精选_概念_06

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK