java中的正则表达式(一)

最近在学习springMVC的源码并尝试从零开发一下web框架。在学习用遇到了一个拦路虎————正则表达式。在我平时的开发工作中对于正则表达式的使用并不是很频繁,可以说是几乎不用,即使用到了都是通过上网百度查询,久而久之正则表达式成了我的短板(虽然这块短板还没有影响我的工作)。在看了springMVC的框架后发现,其实正则表达式在封装框架中起着至关重要的作用,因此熟练的掌握正则表达式可以帮助我们学习底层的代码逻辑。

正则表达式:是一串字符,它描述了一种文本模式。这句话取自java编程的逻辑。正则表达式中的字符有两类,一类是普通字符用来匹配其本身,一类是元字符,这类字符有特殊的含义。这里需要注意一点,正则表达式有它自己的语法,许多的编程语言都支持正则表达式但是可能不同的语言对于正则表达式的语法解析是不同的,这里我介绍的是java中的正则表达式。

1.单个字符

绝大多数单个字符表示的就是其本身例如:‘A’,‘B‘,‘C‘。但是有一些字符是需要多个字符表示的,比如‘\n’换行 ‘\t‘tab键。以八进制表示的字符要以‘\0’后面跟1~3位数字,以十六进制表示的字符要以‘\x’开头后面跟两个字符,以Unicode编号表示的字符要以‘\u’开头后面跟4个字符。在正则表达式中还有一些元字符:?、*、. 需要表示这些字符本身需要使用‘\’来转义例如:‘\?’,如果需要表示反斜杠本身需要‘\\‘即可。

2.字符组

在单个字符和任意字符中有一个字符组的概念表示匹配指定字符中的一个字符,在正则表达式中使用[]表示。例如:[sbcds]表示匹配s、b、c、d、s中的任意一个字符。为了方便的表示多个连接的字符,可以使用连字符‘-’来表示。[0-9]表示匹配0~9的任意一个字符;[a-z]表示匹配a~z的任意一个字符,如果需要匹配连接符‘-’可以把连接符写在[-a-z]写在最前面,也可以使用转义字符进行转义。在‘[’后面紧跟一个‘^’表示排除匹配,如果[^abcd]表示匹配除了abcd的任意字符,这里^在开头才表示元字符如果不在开头表示的就是普通的^。在字符组中除了[]\-^外,其他的元字符不具有任何特殊含义只表示其本身。有一些以\开头的字符,表示一些预定义的字符组,比如:\d表示匹配一个数字字符等同于[0-9]、\w表示匹配一个单词字符等同于[0-9a-zA-Z_]、\s表示匹配一个空白字符,它们都有对应的排除型字符组,只需要把\后面的字母修改成大写即可。

3.量词

量词的作用是指定前面元字符出现的次数,我介绍的量词有三个,分别是“+、*、?”。“+”表示匹配前面的原字符一次或多次、"*"表示匹配前面的字符零次或多次、“?”表示匹配前面的字符一次或零次。比起+、?、*使用更频繁的是{m,n},叫做通用量词表示前面的一个字符出现的次数最少m次,最多n次。如果n没有限制,n可以省略。关于量词有一个比较重要的是量词默认都是贪婪的,比如有这样的一个正则表达式:"<a>.*</a>",如果用这个表达式器匹配<a>e</a><a>b</a>,默认只会匹配一次而不是去分别匹配,遇到这种情况如果希望正则表达式去分配匹配可以在量词的后面加上一个‘?’也就是<a>.*?</a>。

4.分组

正则表达式可以用()表示分组,例如:“a(bcd)ef”,其中bcd就是一个分组。在正则表达式中每一个分组都有一个序号,默认从1开始从左向右递增,其中a(bcd)ef这表达式的第一个分组就是bcd。分组后可以使用量词修饰,比如“a(bcd)?ef”表示可以匹配abcdef也可以匹配aef。在使用分组()和元字符“|”结合可以实现和[]类似的功能表示匹配其中的一个字符例如:(aa|bb|cc)。在正则表达式中可以通过\加分组序号来表示之前匹配的分组,这就叫做回溯引用,例如:<(\w+)>aa</\1>其中\1表示的是匹配之前的分组<(\w+)>。使用数字序号分组有时可能会让用户混淆所以这时我们可以使用命名分组,对于声明命名分组的语法是:(?<name>X),引用分组的语法是:\k<name>,例如:<:(?<test>\w+)></\k<test>>。

5.边界匹配

在正则表达式中我们除了可以指定字符的匹配规则也可以指定字符的边界的匹配规则。我只介绍几种常用的边界匹配符号。1.边界^:表示匹配整个字符串的开始,例如^abc表示匹配以abc开头的字符串。注意如果在多行匹配模式下^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。2.边界$:表示匹配整个字符串的末尾,如果设置的多行匹配模式$也匹配 ’\n’ 或 ’\r’ 之前的位置。3.\z表示匹配字符串结束的边界,包括换行符。4.\b表示匹配单词的边界,这个边界的要求是要求匹配的边界一边是单词而另一边不是单词才能匹配。

6.环视边界匹配

环视边界匹配表示的也是字符串的边界匹配,分别有对字符串的左边边界匹配和对右边边界匹配,我主要介绍四种环视边界匹配。1.肯定顺序环视,表示指定字符串边界的右边字符串的匹配模式,语法为:(?=...),例如:abc(?=23)表示可以匹配abc23但是不能匹配abc2。2.否定顺序环视,表示指定字符串边界的右边字符串不能匹配的模式,语法为:(!=...),例如:abc(!=23)表示除字符c后面不匹配有23的字符串。3.肯定逆序环视,表示指定字符串边界的左边字符串的匹配模式,语法为:(?<=...),例如:(?<=\d)abc表示字符串abc的左边必须是[0-9]的数字。4.否定逆序环视,表示指定字符串边界的左边字符串不能匹配的模式,语法为:(?<!...),例如:(?<!\d)abc表示字符串abc的左边不能是[0-9]的数字。

原文地址:https://www.cnblogs.com/suyang-java/p/11304771.html

时间: 2024-12-09 17:12:12

java中的正则表达式(一)的相关文章

java 中的正则表达式

一. 什么是正则表达式? 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”).模式描述在搜索文本时要匹配的一个或多个字符串. 二.正则表达式语法参考: https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx.    三.  正则表达式规则的例子: /^(/d{3}-|/d{4}-)?(/d{8}|/d{7})?$/    //国内电话 /^[1-9]*[1-9][0-9]*$/  

9.JAVA中的正则表达式

一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个”\" \\d         #表示一个数字 \\D       #非数字 f\\W+    #表示f开头的单词 \\W       #表示一个非单词字符 \\w       #表示一个单词字符[0-9A-Za-z-]包含’-’ \\s        #空白符号 \\S       #非空白符号 (-|\\

JAVA中的正则表达式--待续

1.关于“\”,在JAVA中的正则表达式中的不同: 在其他语言中"\\"表示为:我想要在正则表达式中插入一个普通的反斜杠: 在Java中“\\”表示为:我想要插入一个正则表达式反斜杠: eg:验证整数的正则表达式为\\d; 如果想要插入一个反斜杠则为:\\\\ : 如果是换行符和制表符则为\n 和\t : 2.特殊字符 Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X

在java中使用正则表达式注意的地方

1. 对^与$的理解 通常我们会通过类似Matcher matcher = Pattern.compile(regex).matcher(string);的代码去拿到一个Matcher对象.这种情况下regex中的^与$匹配的是整个待匹配串string的开头与结尾.而要使^与$去匹配每一行的开始与结尾,则要使用Pattern.MULTILINE.即:Matcher matcher = Pattern.compile(regex, Pattern.MULTILINE).matcher(string

JAVA中的正则表达式简介

正则表达式 作用:验证某个字符串是否符合某种规则 代码: //1.正则表达式验证的规则 String reg = "正则表达式": //Pattern,Matcher在java.util包中 //2.编译正则表达式规则 Pattern pattern = Pattern.compile(reg); //3.规则和字符串进行验证比较 Matcher m = pattern.matcher("比较的字符串"); //4.验证 //.matches()/全匹配..fing

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

java中关于正则表达式的基本使用

概述,当对一个字符串的操作处理逻辑非常复杂,代码量大时可以采取正则表达式的方式来对字符串进行处理,但也有缺点,就是要熟悉各字符,符号及符号组合的意义需要经常使用才能孰能生巧 一.正则表达式的特点 1.作用:符合一定规则的表达式,用于专门操作字符串 2.特点:用于一些特定的符号来表示一些代码操作 3.好处:可以简化对字符串的复杂操作 二.匹配功能 1.定义:String matches方法,用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false 1 public static vo

java中的正则表达式实例

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

java中测试正则表达式

import java.util.regex.*; public class TestRegularExpression { public static void main(String[] args) { if (args.length < 2) { System.out.println("Usage:\n" + "java TestRegularExpression " + "characterSequence regularExpression