您当前的位置:首页 > 互联网教程

java 正则获取 第一个匹配

发布时间:2025-05-20 23:12:43    发布人:远客网络

java 正则获取 第一个匹配

一、java 正则获取 第一个匹配

1、在Java编程中,使用正则表达式进行字符串匹配是一项常用的技术。当我们需要从字符串中提取第一个匹配的结果时,可以使用Matcher类的find()方法。下面是一个简单的示例代码:

2、Matcher matcher= p.matcher(test);

3、这段代码创建了一个Matcher对象,该对象用于测试字符串test是否与正则表达式p匹配。接下来,通过while循环调用matcher.find()方法,该方法会查找并返回字符串中与正则表达式匹配的第一个子串。每次调用find()时,它会从上次匹配结束的位置开始继续搜索,直到找到下一个匹配项或整个字符串被遍历完毕。

4、为了收集所有匹配项,我们可以使用一个集合result来存储这些匹配结果。具体实现如下:

5、在这个循环中,每当find()方法找到一个新的匹配项时,matcher.group()方法会被调用,返回当前匹配的子串,并将其添加到result集合中。这样,我们就可以获取到字符串test中与正则表达式p匹配的第一个子串,并将其存储起来。

6、需要注意的是,find()方法的执行是顺序的,也就是说,它会按照字符串的顺序从前往后查找匹配项。如果字符串中存在多个匹配项,find()方法将返回第一个匹配项,并从该位置开始继续搜索。因此,如果我们想要获取所有的匹配项,需要多次调用find()方法,直到没有更多的匹配项为止。

7、通过这种方式,我们可以灵活地使用正则表达式来处理和分析字符串数据,从而满足不同的编程需求。

二、正则表达式字符匹配

模糊匹配,有两个方向上的“模糊”:横向模糊和纵向模糊。

横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的。

其实现的方式是使用量词。譬如{m,n},表示连续出现最少m次,最多n次。

比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”。

纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能。

其实现的方式是使用字符组。譬如[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个。

比如/a[123]b/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"。

需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如[abc],表示匹配一个字符,它可以是“a”、“b”、“c”之一。

比如[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。用连字符-来省略和简写。

比如要匹配“a”、“-”、“z”这三者中任意一个字符,不能写成[a-z],因为其表示小写字符中的任何一个字符,可以写成如下的方式:[-az]或[az-]或[a\-z]。即要么放在开头,要么放在结尾,要么转义。总之不会让引擎认为是范围表示法就行了。

纵向模糊匹配,还有一种情形就是,某位字符可以是任何东西,但就不能是"a"、"b"、"c"。

例如[^abc],表示是一个除"a"、"b"、"c"之外的任意一个字符。字符组的第一位放^(脱字符),表示求反的概念。

\d就是[0-9]。表示是一位数字。

记忆方式:其英文是digit(数字)。

\D就是[^0-9]。表示除数字外的任意字符。

\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。

记忆方式:w是word的简写,也称单词字符。

\W是[^0-9a-zA-Z_]。非单词字符。

\s是[\t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。

记忆方式:s是space character的首字母。

\S是[^\t\v\n\r\f]。非空白符。

.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西。

如果要匹配任意字符怎么办?可以使用[\d\D]、[\w\W]、[\s\S]和[^]中任何的一个。

量词也称重复。掌握{m,n}的准确含义后,只需要记住一些简写形式。

?等价于{0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗?

+等价于{1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。

*等价于{0,},表示出现任意次,有可能不出现。记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。

\d{3,6}贪婪模式(贪婪匹配)尽可能多的匹配

其中正则/\d{2,5}/,表示数字连续出现2到5次。会匹配2位、3位、4位、5位连续数字。

贪婪模式会尽可能多的匹配。你能给我6个,我就要5个。你能给我3个,我就3要个。反正只要在能力范围内,越多越好。

\d{3,6}?非贪婪模式(惰性匹配);尽可能少的匹配

通过在量词后面加个问号就能实现惰性匹配,因此所有惰性匹配情形如下:

对惰性匹配的记忆方式是:量词后面加个问号,问一问你知足了吗,你很贪婪吗?

一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。

具体形式如下:(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一。

var str='good idea,nice try'

console.log(str.match(reg));//['good','nice']

console.log(string.match(regex));//good

var string="goodbye";     console.log(string.match(regex));//goodbye

以上结果说明,分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了。

三、php正则匹配第一个结尾的

1、1,\D匹配除十进制数字以外的任意数字

2、2,*匹配0次、1次或多次其前的原子

3、----------------------------------------------

4、5,\S匹配除空白字符以外的任意一个字符

5、----------------------------------------------

6、6,\w匹配任意一个数字、字母和下划线

7、----------------------------------------------

8、7, [] 1)用来表示范围。 2)匹配任意一个中括号中定义的原子

9、----------------------------------------------

10、8, [^]表示匹配任意一个除中括号里面定义的原子

11、----------------------------------------------

12、9,{n}表示其前的原子正好出现n次

13、----------------------------------------------

14、10,{n,}表示其前的原子至少出现n次,最多不限制

15、----------------------------------------------

16、----------------------------------------------

17、----------------------------------------------

18、13,{m,n}表示其前的原子最少出现m次,最多出现n次

19、----------------------------------------------

20、14,.匹配除换行符(\n)以外的任意字符【windows下还匹配\f\r】

21、----------------------------------------------

22、15,|两个或多个分支选择【优先级最低】

23、----------------------------------------------

24、----------------------------------------------

25、----------------------------------------------

26、18,() 1)模式单元,把多个小原子组成一个大原子。2)可以改变优先级

27、----------------------------------------------