ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java正则表达式分组与匹配全解析

Java正则表达式分组与匹配全解析 结论是。如果你和那个合作类一起用。.那么就会提供对正则表达式的分组支持.同时也会支持对正则表达式进行多次匹配操作。要是你单独去用的话。.那就只能使用最基础也最简单的 regex 输入参数.这种只有一种形式的匹配方式。java的正则表达式功能, 是通过在java.util.regex这个包里面所包含的那些类与类之间的关系来共同实现的。小编在这里建议大家, 在仔细阅读以下文章的过程当中, 最好同时把java的API参考文档给打开。当正文内容介绍到某个特定的方法时, 请大家及时去查阅java API文档中对该方法的详细说明, 这样下去做的话整体效果一定会更好。这个类的主要用途是用来创建一个正则表达式, 或者从另一个角度来看, 也可以将其视为创建一种匹配模式的方式。该类别的构造方法被设计成了私有属性, 因此在日常开发过程中是不允许直接通过构造方法来创建对象的。不过, 用户还是可以通过调用名为plie的函数并配合regex参数来实现这一目的, 这个方法实际上是一个简单工厂方法, 借助它能够比较轻松地生成一个正则表达式的实例。Java代码示例:ppile(\\w);p.返回那个 \w。()返回的是正则表达式的字符串形式, 其实它就是返回了plileregex里面的那个叫做regex的参数。1.将输入内容使用点进行分割处理。存在一种名为 split( input)的方法, 该方法用于分隔字符串操作, 并且会返回一个结果集合, 基于此现象进行推测, .split( regex)这一形式实际上是借助于.split( input)的功能机制来完成的实现过程。Java代码示例:ppile(\\d);是由变量p执行分割操作所获得的结果, 该操作中使用的分隔符字符串依次为, “我的QQ是: ”, 紧接着是“我的电话是: ”, 最后是“我的邮箱是: ”。结果被写成这样, 具体的文本内容是把字符串赋值给变量名为str的那个东西, 第一个是告诉别人我的QQ号码是哪个, 第二个是告诉别人我的电话号码是哪个, 然后第三个说的是我的电子邮箱地址在哪里。2.regex, input 这个组合实际上代表的是一个静态方法。这个方法的主要作用在于对字符串进行快速的匹配处理。它更加适用于那种只需要进行一次匹配, 并且要求将字符串的全部内容都匹配上的场景。Java代码示例:使用正则表达式\d对数字2223进行匹配, 并且返回的结果为真。这段代码使用了正则表达式来匹配数字, 如果无法匹配到所有字符串的话就会返回假值, 因为这里的aa字符串没有办法被正确匹配到。因为要求必须匹配完整的整个字符串才能返回真值, 而当前的输入里存在“bb”这样的内容不满足条件, 所以结果为假。3..( input)说了这么多, 终于轮到类登场了。 input返回一个对象。类的构造方法是私有的, 所以是不能够随意进行创建的, 只能通过input方法得到该类的实例。类只能做一些简单的匹配操作, 要想得到更强更便捷的正则匹配操作, 那就需要将与一起合作, 类提供了对正则表达式的分组支持, 以及对正则表达式的多次匹配支持。Java代码示例:ppile(\\d);mp.();m.这个语句的作用是进行返回操作, 所返回的内容为变量p, 也就是说, 返回的是那个创建了当前对象的对象。4..()/ .()/ .find()那个类型会提供三个用于进行匹配的操作方法, 这三个方法的返回结果都是某个特定的类型, 当发生匹配情况的时候会返回布尔值里的真, 在没有匹配到的时候则会返回布尔值里的假。整个字符串都要经过一遍匹配操作, 在全部的字符都对上了的情况下, 才会给出返回值为真的结果。Java代码示例:ppile(\\d);mp.();m.调用该方法其返回值是 false 原因是 bb 无法被 \d 所匹配 ; 这样就直接导致整个字符串的匹配过程未能成功。m2p.(2223);执行 m2 这个对象的 match 方法, 结果是 true, 这是因为那个由 \d 加上一堆加号组成的正则表达式, 成功匹配了整个字符串。我们现在回头看一下.( regex, input),它与下面这段代码等价把输入的内容扔进那个用表达式搞出来的堆里, 然后让它自己转圈循环。()会对前面的字符串执行匹配操作。只有当那个匹配到的字符串确实位于最前面的时候, 才会返回表示真值的true。Java代码示例:ppile(\\d);mp.();m.这一种情况会返回真值, 原因是正则表达式里的数字序列部分成功匹配到了位于前面的那个由两个相同数字组成的数值内容。m2p.();m2函数执行后会返回一个false的布尔值, 这是因为\d这个模式没有办法对前面的aa字符串进行有效的匹配。利用 find 方法对字符串进行匹配, 匹配到的那个字符串, 可以在任何的位置上面。Java代码示例:ppile(\\d);mp.();m.通过调用find()这个方法操作, 可以返回一个true的值。m2p.();调用m2.find()方法, 该方法会返回true。m3p.();调用find方法之后, 会得到一个布尔类型的结果值, 这个值的具体表现是返回了真。m4p.(aabb);m4.find(), 这个方法会返回一个结果, 具体的结果是假。5.调用.start()方法, 接下来调用.end()方法, 最后调用.group()方法。当使用(), ()以及find()来执行匹配操作以后, 就可以利用上面那三个方法拿到更加详细的信息。把start ()这个操作执行之后, 它所返回的结果是匹配到了的那一段子字符串在原本的那个字符串里面所处的索引位置, 用逗号隔开。end这个动作会返回一个值, 这个值表示的是与匹配条件相符合的子字符串里头, 最后面那个字符在原大字符串中所在的位置序号。当执行group()这一操作的时候, 它会返回那个匹配到的子字符串。Java代码示例:ppile(\\d);mp.();m.执行查找的动作, 这个操作是用来匹配编号为二零二二的字符串。m.执行start函数, 这个操作会导致数字3被返回出来。m.执行end函数的动作, 会返回数值7这个结果, 这个被返回的数值7, 指的是在序列2223后面的那个位置所对应的索引编号。m.执行了group()方法, 该方法返回的结果是2223。m2p.();调用m2函数, 执行匹配操作, 该操作能够成功匹配到字符串2223。m2.start()这个操作会返回0原因就在于括号里面只能匹配到前面的那个字符串, 因此在使用括号去进行匹配的时候。start()这个方法通常一直都会返回0这个数字。调用函数或者方法执行结束操作, 最后面的结果显示返回值为数字4。调用m2.group()这个操作, 返回回来的值是2223。设置变量m3的值为调用p方法并传入参数2223的结果, 也就是m3p.(2223)。如果写成m3p.()这种形式, 那么下面的方法会出现错误, 原因是数据不匹配从而返回了false值。调用m3这个对象里面的空的括号方法, 它的功能是用来把整个字符串内容全都匹配到的。让m3去执行启动操作, 然后得到的返回值是0。使用m3.end方法来获取结果, 它会返回包含数字3的字符串, 出现这种结果的深层原因已经显而易见啦, 这是因为括号内部的要求是需要与全部的文本内容实现一一匹配。调用m3.group这个方法, 返回出来的结果就是2223。经过前面的详细讲解, 想必读者朋友们已经对前文提及的那些方法的使用情况有了清楚的认识。接下来, 就该聊聊正则表达式里的分组概念, 看看它是在java这个编程环境里面是如何被实际使用的了。start()、end()以及group()这三个方法, 每一个都配备了一个重载版本, 它们的具体表现形式是start(int i)、end(int i)以及group(int i), 这些专门被设定用来处理分组的操作情况, 在该关联的类里面, 还另外存在一个特定的方法, 这个方法的用途主要是为了返回具体有多少个分组的存在。Java代码示例:ppile(()(\\d));mp.();m.调用find()这个方法, 用来表示匹配的这个含义。m.返回值为2, 因为有2组。m.start(1)这一步操作会返回一个零这样的数字, 这个数字表示的是在整体那个长长的字符串里面, 第一组成功匹配上的那一小段文字, 它是从第几个位置开始算起的。m.先执行start方法并传入整数2作为参数, 然后观察到其返回值为3。m.end(1); 这一行代码的作用是返回3, 也就是返回第一组所成功匹配到的子字符串之中, 最后一个字符在当前整个大字符串里面的起始位置索引, 该索引的数值最终为3。m.执行end方法并传入参数2, 然后返回7。m.group(1); //返回aaa,返回第一组匹配到的子字符串m.调用第二组, 这步操作会返回字符串二十一二十三, 因为这里是返回第二分组所匹配到得子串。我们现在来使用一下稍微高级一些的正则匹配操作, 比如有这样一段文本, 里面有很多数字, 而且这些数字是分开的, 现在我们想要把文本中所有的数字都取出来, 利用 java 的正则操作会变得那么地简单。Java代码示例:ppile(\\d);mp.(我的QQ号是: , 我的电话号码是: , 我的电子邮箱是: )。while(m.find()) {.out.(m.group());输出:123假如说, 要是把上面那个叫做while循环的东西更换掉变成。while(m.find()) {.out.(m.group());.out.print(start:m.start());点出结尾这个值等于这个m的结尾。则输出:start:6 end:12开始时间是19, 结束时间是26。123start:36 end:39现在大家应该都明白了, 每一次执行匹配操作的之后, start()、end()和group()这三个方法的返回的值, 都会发生改变, 变成匹配到的子字符串的相关信息, 至于它们的那些重载方法的话, 其返回值也会发生相应的改变, 变成对应版本应有的信息。需要格外留意的是, 一定要保证匹配操作已经成功完成才可以启动start(),end(),group()这三个方法的调用, 不然的话程序就会抛出java.lang.n这个错误, 具体来说就是在(),(),find()这几个方法里面只要有任意一个方法的返回值表现为true的这种情况, 才能够进行合法使用。
返回列表