Class Matcher

本文深入探讨了Java中的Matcher类,包括其用途、如何创建Matcher对象、执行的匹配操作类型及其返回值,以及如何修改和查询Matcher的显式状态。此外,还介绍了Matcher在替换匹配子序列方面的应用。

java.util.regex
Class Matcher

java.lang.Object
  extended by java.util.regex.Matcher
All Implemented Interfaces:
MatchResult

public final class Matcher
   
    extends Object
   
   
    implements MatchResult
   

An engine that performs(执行) match operations(操作) on acharacter sequence byinterpreting(解释) a Pattern.

执行匹配操作在一个字符序列通过pattern

A matcher is created from a pattern by invoking(调用) the pattern'smatcher method. Once created, a matcher can be used to perform three different kinds of matchoperations:

一个matcher被创建时从一个pattern调用这pattern的matcher方法,一旦被创建,

matcher能被用执行三种不同的匹配操作

  • The matches method attempts to match the entire(全部) input sequence against the pattern.

  • The lookingAt method attempts to match the input sequence, starting at the beginning, against the pattern.

  • The find method scans the input sequence looking for the next subsequence that matches the pattern.

    matches 方法有顺序的匹配所有

    lookingAt 方法是匹配从开始到结束的匹配

    find 方法有顺序的找下一个匹配

Each of these methods returns a boolean indicating(指示) success or failure. More information about a successful match can beobtained(获得) byquerying(询问) the state of the matcher.

三个方法返回的是一个boolean表示成功或者失败。能获得许多关于成功匹配的信息

通过询问matcher

A matcher finds matches in a subset(子集) of its input called theregion(范围). By default, theregion contains all of the matcher's input. The region can bemodified(修改) via(通过) the region method and queried via theregionStart andregionEnd methods. The way that the region boundaries(周围) interact(交换) with some patternconstructs(建筑,样式) can be changed. See useAnchoringBounds anduseTransparentBounds for more details.

matcher匹配的子集在它中叫区域,默认情况下,这区域包含了所有匹配的数据。

区域能被修改用region方法和查询可以通过regionStartregionEnd 方法。

这区域的周围可以交换用一些patter样式能被改变。查看useAnchoringBounds 和useTransparentBounds更多的信息。

This class also defines(规定) methods for replacing matched subsequences with new strings whose contents can, ifdesired(渴望,想要的), be computed from the match result. TheappendReplacement andappendTail methods can be used in tandem(串联) in order to collect the result into anexisting(现有) string buffer, or the more convenientreplaceAll method can be used to create a string in which every matching subsequence in the input sequence is replaced.

这个类规定许多方法有序替换字符串用新的字符串。如果需要的话,matcher结果计算

appendReplacement 和appendTail 方法能被用来串联成集合在一个现有的字符缓冲区

更方便的replaceAll 方法能被用创建一个字符串,被替换的在每个有序匹配。

The explicit state of a matcher includes the start and end indices of the most recent successful match. It also includes the start and end indices of the input subsequence captured by eachcapturing group in the pattern as well as a total count of such subsequences. As a convenience, methods are also provided for returning these captured subsequences in string form.

匹配的成功状态包含了开始和结束的索引,它还包含了开始和结束

The explicit(明确的) state of a matcher is initially(最初的) undefined; attempting(尝试) to query any part of it before a successful match willcause(引起) anIllegalStateException to be thrown. The explicit state of a matcher isrecomputed(重新) by every match operation.

The implicit(绝对的) state of a matcher includes the input character sequence as well as theappend position, which isinitially zero and is updated by theappendReplacement method.

这matcher最初是未定义的,尝试查询任何部分在匹配成功之前将引起一个IllegalStateException 抛出

明确的匹配是重新每个匹配操作。

matcher的绝对匹配包含字符串顺序输入和追加位子。最初由0开始和更新通过appendReplacement 方法。

A matcher may be reset explicitly(明白的,正确的) by invoking itsreset() method or, if a new input sequence isdesired(想得到), itsreset(CharSequence) method. Resetting a matcher discards(不使用) its explicit state information and sets the append position to zero.

Instances of this class are not safe for use by multiple concurrent threads. 

mathcher匹配正确通过它的reset方法或者,假如需要一个新的输入序列,

它的reset(CharSequence)方法,重新的一个匹配将丢弃和设置这位子为0

这个类的实例不是安全的通过多线程使用。

下载前必看:https://renmaiwang.cn/s/bvbfw Verilog设计_串并转换 / 移位寄存器实现了一种串并转换的功能,其核心原理在于移位寄存器的运用。 这里详细展示了串转并以及并转串两种不同的设计方案。 每一种转换模式都设有专属的使能信号,同时并行输出数据的格式提供了两种选择:最低有效位优先(lsb)和最高有效位优先(msb)。 串并转换技术主要应用于串行传输与并行传输这两种数据传输模式之间的相互转换,而移位寄存器是达成这一目标的常用工具,能够支持并行及串行的数据输入与输出操作。 这些移位寄存器通常被设定为“串行输入、并行输出”(SIPO)或“并行输入、串行输出”(PISO)两种工作模式。 在串行数据输出的过程中,构成数据和字符的码元会按照既定的时间顺序逐位进行传输。 相比之下,并行数据传输则是在同一时刻将固定数量(普遍为8位或16位等)的数据和字符码元同时发送至接收端。 数据输入通常采用串行格式进行。 一旦数据成功输入寄存器,它便可以在所有输出端同时被读取,或者选择逐位移出。 寄存器中的每个触发器均设计为边沿触发类型,并且所有触发器均以特定的时钟频率协同工作。 对于每一个输入位而言,它需要经过N个时钟周期才能最终在N个输出端呈现,从而完成并行输出。 值得注意的是,在串行加载数据期间,并行输出端的数据状态应保持稳定。 数据输入则采用并行格式。 在将数据写入寄存器的操作过程中,写/移位控制线必须暂时处于非工作状态;而一旦需要执行移位操作,控制线便会变为激活状态,并且寄存器会被锁定以保持当前状态。 只要时钟周期数不超过输入数据串的长度,数据输出端Q将按照预定的顺序逐位读出并行数据,并且必须明确区分最低有效位(LSB)和最高有效位(MSB)。
03-08
### 关于 `matches` 方法的解析 #### Java 中 `matches()` 的功能描述 在Java中,`matches()` 方法用于验证整个字符串是否完全匹配给定的正则表达式模式[^2]。该方法返回一个布尔值:当输入字符串与指定模式相吻合时返回 `true`;反之,则返回 `false`。 #### 示例代码展示如何使用 `matches` 下面是一个简单的例子来说明怎样利用 `matches()` 函数进行字符串匹配: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatchesExample { public static void main(String[] args) { String input = "Hello world"; Pattern pattern = Pattern.compile("Hello.*world"); Matcher matcher = pattern.matcher(input); if (matcher.matches()) { System.out.println("The string matches the regex."); } else { System.out.println("No match found."); } } } ``` 在这个实例里,定义了一个名为 `"Hello.*world"` 的正则表达式模式并尝试将其应用于变量 `input` 所持有的文本串。由于这里的正则表达式能够表示任何以 "Hello" 开始且以 "world" 结束的内容(中间可以有任意数量字符),因此这段程序会输出 “The string matches the regex.” 表明找到了匹配项。 #### 正则表达式的分组捕获特性 除了基本的匹配操作外,还可以通过创建子表达式的方式实现对特定部分数据提取的功能——即所谓的“分组”。这可以通过圆括号 `()` 来完成,在上述案例基础上稍作修改即可看到效果: ```java String input = "Hello world"; Pattern pattern = Pattern.compile("(He)(ll)(o)"); Matcher matcher = pattern.matcher(input); if (matcher.matches()) { for (int i = 0; i <= matcher.groupCount(); i++) { System.out.println(matcher.group(i)); } } else { System.out.println("No match found."); } ``` 这里不仅检验了整体字符串是否符合预期格式,还进一步获取到了各个组成部分的具体内容,并依次打印出来。注意此处循环是从索引 `0` 开始遍历至 `groupCount()` 返回的最大数目,其中第零个元素代表完整的匹配结果而后续编号对应各自独立的子群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值