栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

正则表达式及其常用语法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式及其常用语法

常用语法

正则表达式由字面值字符和特殊符号组成。

表1 常用语法
正则表达式匹配示例
x指定字符xJava匹配Java
.除了换行符外的任意单个字符Java匹配J..a
(ab|cd)ab或者cdten匹配t(en|im)
[abc]a、b或者cJava匹配Ja[uvwx]a
[^abc]除了a、b或c之外的字符Java匹配Ja[ ^asx]a
[a-z]a到zJava匹配[A-M]av[a-z]
[^a-z]除了a-z之外的任意字符Java匹配[ ^A-C]av[ ^b-d]
[a-e[m-p]]a到e或m-pJava匹配[A-G[I-M]]av[a-d]
[a-e&&[c-p]]a到e与c到p的交集Java匹配[A-P&&[I-M]]av[a-d]
d一位数字,等同于[0-9]Java2匹配"Java[\d]"
D一位非数字$Java匹配"[\D][\D]ava"
w单词字符Java1匹配"[\w]ava[\d]"
W非单词字符$Java匹配"[\W][\w]ava"
s空白字符"Java 2"匹配"Java[\s]2"
S非空白字符Java匹配"[\S]ava"
p*0或者多次出现模式paaaa匹配"a*"
p+1或者多次出现模式p

a匹配"a+b*"

able匹配"(ab)+. *"

p?0此或者1次出现模式p

Java匹配"J?Java"

ava匹配"J?ava"

p{n}正好出现n次模式pJava匹配"Ja{1}.*"
p{n,}至少出现n次模式p

aaaa匹配"a{1,}"

a不匹配"a{2,}"

p{n,m}[n,m]次出现模式p

aaaa匹配"a{1,9}"

abb不匹配"a{2,9}b{2}"

p{P}一个标点字符!"#$%&'()*+,-./:;<=>?@[]^_'{|}~

J?a匹配"Jp{P}a"

J?1a不匹配"Jp{P}a"

注意

  1. 反斜杠是一个特殊的字符,在字符串中开始转义序列。因此在Java中需要使用 来表示

  2. 空白字符是' '、't'、'n'、'r'、'f',因此,s和[tnrf]等同,S和[ ^tnrf]等同

  3. 单词字符是任何的字母、数字或者下划线字符,因此w等同于[a-z[A-Z] [0-9]_],或者简化为[a-Za-z0-9_],W等同于[ ^a-Za-z0-9_]

  4. 上表中的后面6个条目*、+、?、{n}、{n,}以及{n,m}称为量词符,用于确定量词符前面的模式会重复多少次。

  5. 不要在重复量词符中使用空白,例如A{3,6}不能写成逗号后面有一个空白符的A{3, 6}

  6. 可以使用括号来将模式进行分组,例如,(ab){3}匹配ababab,但是ab{3}匹配abbb

示例

  1. 社会安全号的模式是xxx-xx-xxxx,其中x是一位数字,其正则表达式可以为:

    [0-9]{3}-[0-9]{2}-[0-9]{4} 或者 [\d]{3}-[\d]{2}-[\d]{4}:

    "111-22-3333".matches("[0-9]{3}-[0-9]{2}-[0-9]{4}");//true
    "111-22-333".matches("[0-9]{3}-[0-9]{2}-[0-9]{4}");//false
  2. 偶数以数字0、2、4、6、8结尾,偶数的模式可以描述为:

    [0-9]*[02468] 或者[\d]*[02468]

  3. 电话号码的模式是(xxx)xxx-xxxx,其中x是一位数字,并且第一位数字不能为0,其正则表达式可以为:

    \([1-9][0-9]{2}\)[0-9]{3}-[0-9]{4} 或者\([1-9][\d]{2}\)[\d]{3}-[\d]{4}

  4. 假定姓由最多25个字母组成,并且第一个字母为大写形式,则姓的模式可以描述为:

    [A-Z][a-z[A-Z]]{1,24}

  5. Java中的标识符必须以字母、下划线、或者美元符号开头,不能以数字开头;必须由字母、数字、下划线、美元符号组成的字符序列,则标识符的模式可以描述为:

    [a-zA-z_$][a-Za-z0-9$_]*或者[a-zA-z$_][\w$]*

  6. ".*"匹配任何字符串

用正则表达式替换和拆分字符串
  • matches()方法匹配字符串

  • replaceAll()方法替换所有匹配的子字符串

    "Java Java Java".replaceAll("v\w","wi");//Jawi Jawi Jawi
  • replaceFirst()方法替换第一个匹配的子字符串

    "Java Java Java".replaceFirst("v\w","wi");//Jawi Java Java
  • 重载了split(regex)方法,使用匹配的分隔符将一个字符串拆分为子字符串

    "Java1HTML2Perl".split("\d");//拆分为Java,HTML,Per
  • spilt(regex,llimit)方法,limit参数确定匹配模式匹配多少次,如果limit<=0,spilt(regex,llimit)等同于spilt(regex);如果limit>0,模式最多匹配limit-1次

    "Java1HTML2Perl".split("\d",0);//拆分为Java,HTML,Per
    "Java1HTML2Perl".split("\d",1);//拆分为Java1HTML2Per
    "Java1HTML2Perl".split("\d",2);//拆分为Java,HTML2Per
    "Java1HTML2Perl".split("\d",3);//拆分为Java,HTML,Per
    "Java1HTML2Perl".split("\d",4);//拆分为Java,HTML,Per

注意

在默认情况下,所有的量词符都会尽可能匹配多次。在后面添加问号?来把量词符改成匹配尽可能少的次数

"Jaaavaa".replaceFirst("a+","R");//JRva,匹配aaa
"Jaaavaa".replaceFirst("a+?","R");//JRaava,匹配a
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号