java正则表达式:你的字符串好搭档!

java正则表达式:你的字符串好搭档

  1. 本文基于python正则表达式的初步学习基础,进一步加深在Java程序设计中正则表达式的使用语法和规则,体会两者之间的联系与差异。

  1. Question:什么是正则表达式?

  1. 情境导入:有一天QQ邮箱需要验证你的个人信息,请你输入正确的邮箱格式;若输入格式不对则会报错,并提示需含有多少位的数字及字符。

  1. 课本理解:正则表达式(regular expression)简写regex,是一个字符串,用来描述匹配一个字符串集合的模式。对于字符串处理来说,正则表达式是一个强大的工具,使用正则表达式可以来匹配、替换和拆分字符串。

  1. 正则表达式的匹配规则(自制表格汇总)

.

匹配除换行符所有单个字符

^regex

正则必须匹配字符串开头

regex$

正则必须匹配字符串结尾

[abc]

匹配字母abc其中之一

[abc][de]

匹配a或b或c,其后跟着d或e

[^abc]

当符号^出现在中括号开头时,表示否定模式,即匹配除a或b或c以外的所有字符

[^a-z]

匹配除了a-z所有任意字符

[a-z0-9]

表示匹配范围,匹配字母范围为a-z,数字范围为0-9,但不匹配z0

X

指定字符X

XZ

匹配X后接着Z

(X|Z)

匹配X或Z

[a-e[m-p]]

匹配a-e或者m-p

[a-e&&[m-p]]

匹配a-e和m-p的交集

\d

匹配一位数字,等同于[0-9]

\D

匹配一位非数字

\w

匹配单词字符,等同于[a-zA-Z0-9_]字母数字下划线

\W

非单词字符

\S

非空白字符

\s

空白字符(空格或tab键)

P*

出现0次或多次p

P+

出现1次或多次p

P?

0次或者一次出现p

P{n}

正好出现n次p

P{n,}

至少出现n次p

P{n,m}

n-m次出现p

\p{P}

一个标点字符

注意:导入Java的两个与正则表达式相关的pack

import java.util.regex.Matcher;

import java.util.regex.Pattern;

注意:可以用括号来将模式进行分组,如(ab){3}匹配ababab,而ab{3}则匹配abbb

注意:equals和matches的方法有区别,matches的功能更强大,它不仅可以匹配一个固定的字符串,而且可以匹配符合一个模式的字符串集合

注意:使用正则表达式也要注意转义字符“\”,匹配时具体格式例如为[\\d],匹配\\时要用\\\\.括号符在正则表达式中是特殊字符,对于模式分组,为了在表达式中表达字面值或者,必须使用\\或\\(和\\).

例如匹配(xxx)xxx-xxx,其中x为一位数字,regex表示为\\([0-9][\\d]\\)[\\d]{3}-[\\d]{3}

注意:使用“^”符号时,注意[^abc]表示不与括号内任意一项匹配,而“^\\.*”字符串中表示匹配开头内容.

运行实例:

  1. “Java is fun”.matches(“Java*”),字符串.*匹配0或者多个任意字符

  1. 某密码格式为xxx—xx—xxx,其中x为一位数字,则用正则表达式可表示为

[\\d]{3}-[\\d]{2}-[\\d]{3}

  1. 详细分析:^\d+(\.\d+)?

^表示模式必须匹配字符串的开头

d+表示匹配一个或多个数字

?表示括号里的语句是可选的

\.匹配符号.

小括号表示分组

综上分析,可匹配例如“5”,“5.2”,“5.48”等等

4.

以下为一个完整的测试案例:

我们首先创建了一个字符串str,然后使用PatternMatcher类来进行正则匹配。我们分别使用^Hed!$来匹配字符串的开头和结尾,最后输出匹配结果。

import java.util.regex.Pattern;

import java.util.regex.Matcher;

public class RegexDemo {

    public static void main(String[] args) {

        String str = "Hello, World!";

  // 匹配字符串的开始

        Pattern patternStart = Pattern.compile("^He");

        Matcher matcherStart = patternStart.matcher(str);

        if (matcherStart.find()) {

            System.out.println("字符串以'He'开头");

        } else {

            System.out.println("字符串不以'He'开头");

        }

        // 匹配字符串的结束

        Pattern patternEnd = Pattern.compile("d!$");

        Matcher matcherEnd = patternEnd.matcher(str);

        if (matcherEnd.find()) {

            System.out.println("字符串以'd!'结尾");

        } else {

            System.out.println("字符串不以'd!'结尾");

        }

    }

}

5. 检测是不是QQ号(6位及20位之内,0不能在开头,必须全部是数字):

public class Main {

    public static void main(String[] args) {

        //[]是或,{}是重复次数

        String qq = "1234567890";//示例

        System.out.println(qq.matches("[1-9]\\d{5,19}"));

    }

}

6. 判断字符串是否为手机号码。 手机号码规则:以1开头,第二位是3/4/5/7/8之一,后面跟着9位数字。

public class Main {

    public static void main(String[] args) {

        String phone1 = "13812345678";

        String phone2 = "12345678900";

        System.out.println("phone1是否为手机号码:" + phone1.matches("1[34578]\\d{9}"));

        System.out.println("phone2是否为手机号码:" + phone2.matches("1[34578]\\d{9}"));

    }//字符串类型,不变的固定,变化的用正则表达式,准确把握[]和{}的含义

}

7. 验证字符串是否以 “http://” 开头,并且以“.com” 结尾。

public class Main {

    public static void main(String[] args) {

        String email = "http://www.example.com";

        if (email.matches("^http://.*\\.com$")) {

            System.out.println("字符串是有效的电子邮件地址");

        } else {

            System.out.println("字符串不是有效的电子邮件地址");

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值