您的位置 首页 > 德语词汇

regularexpression是什么意思,regularexpression的意思?超详细讲解一篇顶十篇

今天给各位分享regularexpression是什么意思,regularexpression的意思的知识,其中也会对超详细讲解一篇顶十篇进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

一个正则表达式,就是用某种模式去匹配字符串的一个公式。许多语言都提供了对正则表达式的支持

1,提取某段文字中的所有英语单词

regularexpression是什么意思,regularexpression的意思?超详细讲解一篇顶十篇

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\npublicclassRegexpText01{\npublicstaticvoidmain(String[]args){\n\n//文本信息\nStringcontent="Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,"+\n"其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix"+\n"思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行"+\n"主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix"+\n"以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,"+\n"如基于社区开发的debian、archlinux,和基于商业开发的"+\n"RedHatEnterpriseLinux、SUSE、OracleLinux等。\\n"+\n"2021年6月,根据Linux5.14刚刚进入合并队列的char-misc-next提交,"+\n"Linux5.14正式移除了RAW驱动";\n\n//找出其中的全部英语单词\n//找出百度热搜的标题:(///S*)\n//传统方法:使用遍历方式,代码量大,效率不高\n//正则表达式:\n/**\n*1,先创建一个Pattern对象,模式对象,可以理解成一个正则表达式对象\n*2,创建一个匹配器对象\n*3,开始循环匹配\n*/\nPatternpatter=Pattern.compile("([0-9]+)|([a-zA-Z]+)");\n//匹配数字时,[0-9]\n//数字+英文单词([0-9]+)|([a-zA-Z]+)\n//按照patter(模式/样式)。到content文本中匹配,找到true。否false\nMatchermatcher=patter.matcher(content);\nwhile(matcher.find()){\n//匹配内容,文本放到matcher.group();中\nSystem.out.println("找到:"+matcher.group(0));\n}\n}\n}\n为什么要学习正则表达式

找出文本中的所有数字子串

正则表达式技术是对字符串进行模式匹配的技术

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\npublicclassRegexpText02{\npublicstaticvoidmain(String[]args){\n//文本信息\nStringcontent="Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,"+\n"其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix"+\n"思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行"+\n"主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix"+\n"以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,"+\n"如基于社区开发的debian、archlinux,和基于商业开发的"+\n"RedHatEnterpriseLinux、SUSE、OracleLinux等。\\n"+\n"2021年6月,根据Linux5.14刚刚进入合并队列的char-misc-next提交,"+\n"Linux5.14正式移除了RAW驱动";\n\n//目标:匹配所有四个数字\n//说明\n//1,\\\\d表示一个数字\nStringregStr="\\\\d\\\\d\\\\d\\\\d";\n//2,创建模式对象\nPatternpatter=Pattern.compile(regStr);\n//3,创建匹配器\n//说明:创建匹配器matcher,按照正则表达式的规则去匹配content字符串\nMatchermatcher=patter.matcher(content);\n//4,开始匹配\nwhile(matcher.find()){\nSystem.out.println("找到:"+matcher.group(0));\n}\n}\n}\nfind()和group()的实现原理是什么?matcher.find()完成的任务:

1.根据指定的规则,定位满足规则的子字符串\n2.什么是分组,(//d//d)(//d//d),正则表达式中有(),表示分组。第一个()表示第一组,以此类推……\n3.找到后,将子字符串的开始索引记录到matcher对象的属性int[]group,groups[0]=0,把该子字符串结束的索引+1的值记录到gruops[1]=4\n4.同时记录oldLast的值为子字符串结束的索引+1的值即4,下次执行find的时候,从4开始匹配matcher.group():完成的任务:

//JDK源码:\npublicStringgroup(intgroup){\nif(first<0)\nthrownewIndexOutOfBoundsException("Nomatchfound");\nif(group<0||group>groupCount())\nthrownewIndexOutOfBoundsException("Nogroup"+group);\nif((groups[group*2]==-1)||(groups[group*2+1]==-1)){\nreturnnull;\n}\nreturngetSubSequence(groups[group*2],groups[group*2+1]).toString;\n}根据groups[0]和groups[1]=4的记录位置,从content开始截取子字符串返回就是[0,4]包含0但是不包含索引为4的位置关于groups数组的理解:比如匹配(//d//d)(//d//d),匹配四位数的数字,第一组的值即找到1998。group[1]=19;group[2]=98如果正则表达式分组(),即分组,则匹配规则如下

group[0]:表示匹配到的子字符串

group[1]:表示匹配到的子字符串的第一组子串

group[2]:表示匹配到的子字符串的第二组子串

想要灵活的使用正则表达式,必须了解其中各种元字符(Metacharacter)的功能,从功能上大致分为

在其他语言中,\\表示一个反斜杠

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*转义符的使用\n*/\n\npublicclassRegexpText03{\npublicstaticvoidmain(String[]args){\n\nStringcontent="abc$(abc(123(";\n\n//匹配(\nStringregStr="\\\\(";\nPatternpatter=Pattern.compile(regStr);\nMatchermatcher=patter.matcher(content);\n\n//开始匹配\nwhile(matcher.find()){\nSystem.out.println("找到"+matcher.group(0));\n}\n}\n}\n

例如:要匹配.的正则为"\\\\.",而不是”.“。

eg:[efgh]:e,f,g,h中的任意一个字符

eg:除a,b,c之外的任意一个字符,包括数字和特殊符号

.:匹配除\\n以外的任何字符,如果要匹配.要用转义符

eg:a..b:以a开头,b结尾,中间包括2个任意字符的长度为4的字符串,aaab,a67b,a%¥b

\\\\d:匹配单个的数字字符,相当于[0-9]

eg:\\\\d{3}(\\\\d)?包含3个或者4个数字的字符串,123,4567

\\\\D:匹配单个非数字字符串,相当于[\\^0-9]

eg:\\\\D(\\\\d)*,以单个非数字字符开头,后接任意个数字字符串,a、A342、b45678

\\\\w:匹配单个数字,大小写字母字符,相当于[-9a-zA-Z]

eg:\\\\d{3}\\\\w{4},以3个数字字符开头的长度为7的数字字母字符串,234abcd、12345pe

\\\\W:匹配单个非数字,大小写字母字符,相当于[\\^0-9a-zA-Z]

eg:\\\\W+\\\\d{2},以至少1个非数字字母字符开头,2个数字字符结尾的字符串,#29、#@!10

\\\\s:匹配任何空白字符,(空格,制表符等)

\\\\S:相当于对s取反,匹配任何非空白字符

Java的正则表达式是区分字母大小写的,如何实现不区分大小写:

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*选择匹配符的使用\n*/\n\npublicclassRegexpText05{\npublicstaticvoidmain(String[]args){\nStringcontent="韩张三zhangsan";\n\nStringregStr="san|韩|张";\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println("找到"+matcher.group(0));\n}\n}\n}限定符

用于指定其前面的字符和字符和组合项连续出现的次数

*:指定字符重复0此或n此(与具体要求)

eg:(abc),仅包含任意个abc的字符串,等效于\\w\\,abc、abcabcabc

+:指定字符重复次或者n次(至少1次)

eg:m+(abc)*,以至少一个m开头,后接任意个abc的字符串,m、mabc、mabcabc

?:指定字符重复0次或者1次(最多一次)

eg:m+abc?,以至少一个m开头,后接ab或者abc的字符串,mab、mabc、mmmab、mmabc

eg:[abcd]{3},以abcd组成的任意长度为3的字符串,abc、dbc、acd

eg:[abcd]{3,},由abcd中字母组成的任意长度不小于3(>=3)的字符串,aab、dbc、aaabdc

{n,m}:只当至少n个但不多于m个匹配

eg:[abcd]{3,5},由abcd中字母组成的任意长度不小于3,不大于5(5>=x>=3)的字符串,abc、abcd、badab、badca

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*演示限定符的是使用\n*/\n\npublicclassRegexpText06{\npublicstaticvoidmain(String[]args){\nStringcontent="11111111a21aaaaaahello";\n\n//StringregStr="a{3}";//找出三个a\n//StringregStr="1{4}";\n//StringregStr="\\\\d{2}";//表示两位的任意数字字符\n/*\njava的正则匹配默认是贪婪匹配,尽可能匹配多的字符串\n*/\n//StringregStr="a{3,4}";\n//StringregStr="\\\\d{3,5}";\n\n//1+\n//StringregStr="1+";//匹配1个或者多个1\n\n//1*\n//StringregStr="1*";//匹配0个或者多个1\n\n//?的使用\nStringregStr="a1?";//匹配a或者a1\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println(matcher.group(0));\n}\n}\n}\n元字符

^:指定起始字符,^[0-9]+[a-z]*,以至少1个数字开头,后接任意个小写字母,123、6aa、555edf

$:指定结束字符,^[0-9]\\\\-[a-z]+$,以1个数字开头后接连字符”-“,并以至少一个小写字母结尾的字符串,1-a

\\\\b:匹配目标字符串的边界,han\\\\b,这里的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置,hansunping、sphan、nnhan

\\B:匹配目标字符串的边界,han\\\\B,和\\b的含义相反,hanshunping,sphan,nnhan

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*定位符的使用\n*/\n\npublicclassRegexpText07{\npublicstaticvoidmain(String[]args){\n//Stringcontent="123abc";\nStringcontent="hanshunpingabchandefghan";\n\n//StringregStr="^[0-9]+[a-z]*";\n//a123abc,匹配失败\n\n//StringregStr="^[0-9]+[a-z]+$";\n//以a-z的其中一个结尾\n\nStringregStr="han\\\\b";\n//这里的边界值得是字符串的最后,或者是空格的前面字符串的末尾\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println(matcher.group(0));\n}\n}\n}\n分组常用分组

常用分组构造形式

(pattern):非命名捕获,捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其他捕获结果则根据左括号的顺序从1开始自动编号。

(?<name>pattern):命名捕获,将匹配到的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如(?'name')

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*分组\n*/\n\npublicclassregexpText08{\npublicstaticvoidmain(String[]args){\nStringcontent="hanshunpings7789nn1189han";\n\n//StringregStr="(\\\\d\\\\d)(\\\\d\\\\d)";//,匹配四个数字的字符串,相当于d{4};\n//非命名分组\n//matcher.group(0);获取整个的字符串\n//matcher.group(1);获取分组的第一个子字符串\n//matcher.group(2);获取分组的第二个子字符串\n//一个括号是一个组\n//第一个分组是77,第二个分组是89\n\n//命名分组:即可以给分组取名\nStringregStr="(?<g1>\\\\d\\\\d)(?<g2>\\\\d\\\\d)";\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println("找到"+matcher.group(0));\n//System.out.println("第一个分组内容"+matcher.group(1));\n//System.out.println("第二个分组内容"+matcher.group(2));\nSystem.out.println("第一个分组内容[通过组名]"+matcher.group("g1"));\nSystem.out.println("第二个分组内容[通过组名]"+matcher.group("g2"));\n}\n}\n}\n特别分组

(?:pattern):匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。但这对于“or”字符(|)组合模式部件的情况很有用。例如:'industr(?:y|ies)'是比,'indeustry|industries'更经济的表达式

(?=pattern):它是一个非捕获匹配。例如,'Windwos(?=95|98|NT|2000)'的匹配“Windows2000”中的“Windows3.1”中的"Windows"

(?!patter):该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。他是一个非捕获匹配。例如,'Windwos(?=95|98|NT|2000)'匹配“Windows3.1”中的"Windows",但不匹配“Windows2000”中的“Windows“。

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*非捕获分组\n*以下三个全为非捕获分组\n*/\n\npublicclassRegexpText09{\npublicstaticvoidmain(String[]args){\nStringcontent="hello中国人民中国经济abcdef中国发展";\n\n//StringregStr="中国(?:人民|经济)";\n//等价于:StringregStr="中国人民|中国经济";\n\n//要求查找中国人民,中国发展,中国经济中的中国\n//StringregStr="中国(?=人民|经济)";\n\n//和(?=pattern)结果相反\nStringregStr="中国(?!人民|经济)";\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println(matcher.group(0));\n//System.out.println(matcher.group(1));\n//非捕获,不能这么操作\n}\n}\n}\n非贪婪匹配

?:当此字符紧随任何其他限定符(*,+,?,{n},{n,},{n,m})之后时,匹配模式是”非贪心的“。”非贪心的“模式匹配搜索到的,尽可能短的字符串,默认的”贪心“模式匹配搜索到的,尽可能长的字符串。例如在"oooo","o+?"只匹配单个"o",而“o+”匹配所有“o”。

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*正则表达式应用实例\n*1,验证汉字\n*2,邮政编码是1-9开头的数字,比如123890\n*3,QQ号码是1-9开头的一个(5位数-19位数),比如12389.134578\n*4,手机号码必须以13,14,15,18开头的11位数。\n*/\n\npublicclassRegexpText10{\npublicstaticvoidmain(String[]args){\n//验证汉字\n//Stringcontent="中国人";\n//汉字编码范围之内\n//StringregStr="^[\\u0391-\\uffe5]+$";\n\n//邮政编码\n//Stringcontent="744500";\n//StringregStr="^[1-9]\\\\d{5}$";\n\n//QQ号码\n//Stringcontent="14815566";\n//StringregStr="^[1-9]\\\\d{4,9}$";\n\n//手机号码\nStringcontent="13588886666";\nStringregStr="^1[3|4|5|8]\\\\d{9}$";\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\nif(matcher.find()){\nSystem.out.println("满足格式");\n}else{\nSystem.out.println("不满足格式");\n}\n}\n}\n

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*验证url\n*/\n\npublicclassRegexpText11{\npublicstaticvoidmain(String[]args){\nStringcontent="https://www.bilibili.com/video/BV1Eq4y1E79W?p=17&spm_id_from=pageDriver";\n\n/**\n*思路:\n*确定url的开始部分https://|http://\n*regStr="^((http|https)://)";https://\n*regStr="^((http|https)://)([\\w-]+\\.)+";https://www.bilibili.\n*regStr="^^((http|https)://)([\\w-]+\\.)+[\\w-]+$+$";https://www.bilibili.com\n*regStr="^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\\\/[\\\\w-?=&/%.]*)?$";https://www.bilibili.com/video/BV1Eq4y1E79W?p=17&spm_id_from=pageDriver\n*/\n\nStringregStr="^((http|https)://)?([\\\\w-]+\\\\.)+[\\\\w-]+(\\\\/[\\\\w-?=&/%.#]*)?$";//[.]匹配的是.本身,等价于\\\\.。不加[]时,匹配的是所有字符\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nif(matcher.find()){\nSystem.out.println("满足格式");\n}else{\nSystem.out.println("不满足格式");\n}\n}\n}\nPatternSyntaxException

是一个非强制异常类,表示一个正则表达式模式中的语法错误

packagecom.company.Regexp;\n\nimportjava.util.regex.Matcher;\nimportjava.util.regex.Pattern;\n\n/**\n*匹配两个连续相同的数字(\\\\d)\\\\1反向引用一次\n*匹配五个连续相同的数字(\\\\d)\\\\1{4}反向引用四次\n*匹配个位和千位相同,十位和百位相同的数字5225,1551\n*在字符串中检索商品编号,如:12321-333999111\n*要求满足前面是一个五位数,然后一个-号,然后一个九位数,连续的三位要相同\n*/\n\npublicclassRegexpText12{\npublicstaticvoidmain(String[]args){\n\nStringcontent="22222h1234ell7896ojac1551kt12321-333999111om11jack22xxxyyy";\n\n//匹配两个连续相同的数字\n//StringregStr="(\\\\d)\\\\1";\n\n//匹配五个连续相同的数字\n//StringregStr="(\\\\d)\\\\1{4}";\n\n//匹配个位和千位相同,十位和百位相同的数字5225,1551\n//StringregStr="(\\\\d)(\\\\d)\\\\2\\\\1";\n\n//在字符串中检索商品编号,如:12321-333999111\nStringregStr="\\\\d{5}-(\\\\d)\\\\1{2}(\\\\d)\\\\2{2}(\\\\d)\\\\3{2}";\n\nPatternpattern=Pattern.compile(regStr);\nMatchermatcher=pattern.matcher(content);\n\nwhile(matcher.find()){\nSystem.out.println(matcher.group(0));\n}\n\n}\n}

结巴去重案例

关于regularexpression是什么意思,regularexpression的意思的内容到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023