- java.lang.Object
-
- java.util.regex.Matcher
-
- All Implemented Interfaces:
-
MatchResult
public final class Matcher extends Object implements MatchResult
通过解释Pattern对character sequence执行匹配操作的引擎。通过调用模式的
matcher方法,从模式创建匹配器。 创建后,可以使用匹配器执行三种不同类型的匹配操作:这些方法中的每一个返回一个指示成功或失败的布尔值。 通过查询匹配器的状态可以获得有关成功匹配的更多信息。
匹配器在其输入的子集中找到称为该区域的匹配项。 默认情况下,该区域包含所有匹配器的输入。 该区域可以通过
region方法进行修改,并通过regionStart和regionEnd方法进行查询。 区域边界与某些模式构造交互的方式可以改变。 有关详细信息,请参阅useAnchoringBounds和useTransparentBounds。该类还定义了用新字符串替换匹配子序列的方法,如果需要,可以根据匹配结果计算其内容。 可以串联使用
appendReplacement和appendTail方法,以便将结果收集到现有的字符串缓冲区或字符串构建器中。 或者,可以使用更方便的方法replaceAll来创建一个字符串,其中输入序列中的每个匹配子序列被替换。匹配器的显式状态包括最近成功匹配的开始和结束索引。 它还包括每个capturing group在模式中捕获的输入子序列的开始和结束索引以及这样的子序列的总计数。 为了方便起见,还提供了用于以字符串形式返回这些捕获的子序列的方法。
最初未定义匹配器的显式状态; 尝试在成功匹配之前查询任何部分将导致抛出
IllegalStateException。 匹配器的显式状态由每个匹配操作重新计算。匹配器的隐含状态包括输入字符序列以及附加位置 ,其最初为零,并由
appendReplacement方法更新。匹配器可以通过调用其
reset()方法显式地重置,或者如果需要新的输入序列,则它的reset(CharSequence)方法。 重置匹配器会丢弃其显式状态信息,并将附加位置设置为零。此类的实例不能安全地被多个并发线程使用。
- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 MatcherappendReplacement(StringBuffer sb, String replacement)实施非终端附加和替换步骤。MatcherappendReplacement(StringBuilder sb, String replacement)实施非终端附加和替换步骤。StringBufferappendTail(StringBuffer sb)实施终端附加和替换步骤。StringBuilderappendTail(StringBuilder sb)实施终端附加和替换步骤。intend()返回最后一个字符匹配后的偏移量。intend(int group)返回在上次匹配操作期间由给定组捕获的子序列的最后一个字符之后的偏移量。intend(String name)返回在上一次匹配操作期间由给定的 named-capturing group捕获的子序列的最后一个字符之后的偏移量。booleanfind()尝试找到匹配模式的输入序列的下一个子序列。booleanfind(int start)重新设置该匹配器,然后尝试从指定的索引开始找到匹配模式的输入序列的下一个子序列。Stringgroup()返回与上一个匹配匹配的输入子序列。Stringgroup(int group)返回在上一次匹配操作期间由给定组捕获的输入子序列。Stringgroup(String name)返回在上一次匹配操作期间由给定的 named-capturing group捕获的输入子序列。intgroupCount()返回此匹配器模式中捕获组的数量。booleanhasAnchoringBounds()查询该匹配器的区域边界的锚定。booleanhasTransparentBounds()查询此匹配器的区域边界的透明度。booleanhitEnd()如果在匹配器执行的最后一次匹配操作中输入的结尾被搜索引擎命中,则返回true。booleanlookingAt()尝试将输入序列从区域开头开始与模式相匹配。booleanmatches()尝试将整个区域与模式进行匹配。Patternpattern()返回该匹配器解释的模式。static StringquoteReplacement(String s)返回面值替换String指定的String。Matcherregion(int start, int end)设置该匹配器区域的限制。intregionEnd()报告该匹配器区域的最终索引(排他)。intregionStart()报告该匹配器区域的开始索引。StringreplaceAll(String replacement)将与模式匹配的输入序列的每个子序列替换为给定的替换字符串。StringreplaceAll(Function<MatchResult,String> replacer)将与模式匹配的输入序列的每个子序列替换为将给定的替换器函数应用于与该子序列相对应的匹配器的匹配结果的结果。StringreplaceFirst(String replacement)将与模式匹配的输入序列的第一个子序列替换为给定的替换字符串。StringreplaceFirst(Function<MatchResult,String> replacer)将与模式匹配的输入序列的第一个子序列替换为将给定的替换器函数应用于与该子序列对应的匹配器的匹配结果的结果。booleanrequireEnd()如果更多输入可以将正匹配更改为否定,则返回true。Matcherreset()重设此匹配器。Matcherreset(CharSequence input)使用新的输入序列重置此匹配器。Stream<MatchResult>results()返回与模式匹配的输入序列的每个子序列的匹配结果流。intstart()返回上一个匹配的起始索引。intstart(int group)返回给定组在上一个匹配操作期间捕获的子序列的开始索引。intstart(String name)返回在上一个匹配操作期间由给定的 named-capturing group捕获的子序列的起始索引。MatchResulttoMatchResult()将该匹配器的匹配状态返回为MatchResult。StringtoString()返回此匹配器的字符串表示形式。MatcheruseAnchoringBounds(boolean b)设置该匹配器的区域边界的锚定。MatcherusePattern(Pattern newPattern)更改Pattern,这Matcher用于查找与匹配。MatcheruseTransparentBounds(boolean b)设置此匹配器的区域边界的透明度。
-
-
-
方法详细信息
-
pattern
public Pattern pattern()
返回该匹配器解释的模式。- 结果
- 该匹配器创建的模式
-
toMatchResult
public MatchResult toMatchResult()
将该匹配器的匹配状态返回为MatchResult。 结果不受在此匹配器上执行的后续操作的影响。- 结果
-
一个
MatchResult与这个匹配器的状态 - 从以下版本开始:
- 1.5
-
usePattern
public Matcher usePattern(Pattern newPattern)
更改Pattern,这个Matcher用于查找匹配。此方法会导致此匹配器丢失有关发生的最后一个匹配的组的信息。 匹配器在输入中的位置得到维护,其最后一个附加位置不受影响。
- 参数
-
newPattern- 该匹配器使用的新模式 - 结果
- 这个匹配器
- 异常
-
IllegalArgumentException- 如果newPattern是null - 从以下版本开始:
- 1.5
-
reset
public Matcher reset()
重设此匹配器。重置匹配器会丢弃其所有的显式状态信息,并将其附加位置设置为零。 匹配器的区域设置为默认区域,它是其整个字符序列。 该匹配器区域边界的锚定和透明度不受影响。
- 结果
- 这个匹配器
-
reset
public Matcher reset(CharSequence input)
使用新的输入序列重置此匹配器。重置匹配器会丢弃其所有的显式状态信息,并将其附加位置设置为零。 匹配器的区域设置为默认区域,它是其整个字符序列。 该匹配器区域边界的锚定和透明度不受影响。
- 参数
-
input- 新的输入字符序列 - 结果
- 这个匹配器
-
start
public int start()
返回上一个匹配的起始索引。- Specified by:
-
start在接口MatchResult - 结果
- 第一个字符的索引匹配
- 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败
-
start
public int start(int group)
返回给定组在上一个匹配操作期间捕获的子序列的开始索引。Capturing groups从左到右索引,从一开始。 组零表示整个模式,所以表达式m。
start(0)相当于m。start()。- Specified by:
-
start在接口MatchResult - 参数
-
group- 此匹配器模式中捕获组的索引 - 结果
-
该组捕获的第一个角色的索引,或
-1如果匹配成功,但组本身不匹配任何东西 - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败 -
IndexOutOfBoundsException- 如果在给定索引的模式中没有捕获组
-
start
public int start(String name)
返回在上一次匹配操作期间由给定的 named-capturing group捕获的子序列的起始索引。- 参数
-
name- 此匹配器模式中的命名捕获组的名称 - 结果
-
该组所捕获的第一个角色的索引,如果匹配成功但是该组本身不匹配任何内容,
-1 - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者以前的匹配操作失败 -
IllegalArgumentException- 如果在给定名称的模式中没有捕获组 - 从以下版本开始:
- 1.8
-
end
public int end()
返回最后一个字符匹配后的偏移量。- Specified by:
-
end在接口MatchResult - 结果
- 最后一个字符匹配后的偏移量
- 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一匹配操作失败
-
end
public int end(int group)
返回在上次匹配操作期间由给定组捕获的子序列的最后一个字符之后的偏移量。Capturing groups从左到右索引,从一开始。 组零表示整个模式,所以表达式m。
end(0)相当于m。end()。- Specified by:
-
end在接口MatchResult - 参数
-
group- 该匹配器模式中捕获组的索引 - 结果
-
在组合捕获的最后一个角色之后的偏移量,或
-1如果匹配成功但组本身不匹配任何 - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者以前的匹配操作失败 -
IndexOutOfBoundsException- 如果在给定索引的模式中没有捕获组
-
end
public int end(String name)
返回在上一次匹配操作期间由给定的 named-capturing group捕获的子序列的最后一个字符之后的偏移量。- 参数
-
name- 此匹配器模式中的命名捕获组的名称 - 结果
-
由组合捕获的最后一个角色后的偏移量,如果匹配成功,但组合本身不匹配任何内容,
-1 - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败 -
IllegalArgumentException- 如果在给定名称的模式中没有捕获组 - 从以下版本开始:
- 1.8
-
group
public String group()
返回与上一个匹配匹配的输入子序列。对于具有输入序列s的匹配器m ,表达式m。
group()和s。substring(m。start(),m。end())是等效的。请注意,某些模式,例如
a*,匹配空字符串。 当模式成功匹配输入中的空字符串时,此方法将返回空字符串。- Specified by:
-
group在接口MatchResult - 结果
- 以前的匹配匹配的(可能是空的)子序列,以字符串形式
- 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一匹配操作失败
-
group
public String group(int group)
返回在上一次匹配操作期间由给定组捕获的输入子序列。对于匹配器m ,输入序列s和组索引g ,表达式m。
group(g)和s。substring(m。start(g),m。end(g))是等效的。Capturing groups从左到右索引,从一开始。 组零表示整个模式,因此表达式
m.group(0)相当于m.group()。如果匹配成功,但指定的组失败,则匹配输入序列的任何部分,则返回
null。 请注意,某些组(例如(a*))与空字符串匹配。 当这样的组成功匹配输入中的空字符串时,此方法将返回空字符串。- Specified by:
-
group在接口MatchResult - 参数
-
group- 此匹配器模式中捕获组的索引 - 结果
-
在上一次比赛期间由组捕获的(可能为空的)子序列,如果组未能匹配输入的一部分,
null - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败 -
IndexOutOfBoundsException- 如果在给定索引的模式中没有捕获组
-
group
public String group(String name)
返回在上一次匹配操作期间由给定的named-capturing group捕获的输入子序列。如果匹配成功,但指定的组失败,则匹配输入序列的任何部分,则返回
null。 请注意,某些组(例如(a*))与空字符串匹配。 当这样的组成功匹配输入中的空字符串时,此方法将返回空字符串。- 参数
-
name- 此匹配器模式中的命名捕获组的名称 - 结果
-
在上一次匹配期间由命名组捕获的(可能为空的)子序列,如果组未能匹配输入的一部分,
null - 异常
-
IllegalStateException- 如果尚未尝试匹配,或者以前的匹配操作失败 -
IllegalArgumentException- 如果在给定名称的模式中没有捕获组 - 从以下版本开始:
- 1.7
-
groupCount
public int groupCount()
返回此匹配器模式中捕获组的数量。组零表示按照惯例的整个模式。 它不包括在这个计数。
任何小于或等于此方法返回值的非负整数将被保证为此匹配器的有效组索引。
- Specified by:
-
groupCount在接口MatchResult - 结果
- 在该匹配器模式中捕获组的数量
-
matches
public boolean matches()
尝试将整个区域与模式进行匹配。如果匹配成功可以通过获得那么更多的信息
start,end,和group方法。- 结果
-
true如果并且仅当整个区域序列匹配该匹配器的模式
-
find
public boolean find()
尝试找到匹配模式的输入序列的下一个子序列。该方法从该匹配器区域的开始处开始,或者如果该方法的先前调用成功,并且匹配器尚未被重置,则在与之前匹配不匹配的第一个字符处。
如果匹配成功可以通过获得那么更多的信息
start,end,和group方法。- 结果
-
true如果并且仅当输入序列的子序列匹配该匹配器的模式
-
find
public boolean find(int start)
重新设置该匹配器,然后尝试从指定的索引开始找到匹配模式的输入序列的下一个子序列。如果匹配成功可以通过获得那么更多的信息
start,end,和group方法和的后续调用find()方法将在不受此匹配匹配的第一个字符开始。- 参数
-
start- 开始搜索匹配的索引 - 结果
-
true如果并且仅当从给定索引开始的输入序列的子序列匹配该匹配器的模式 - 异常
-
IndexOutOfBoundsException- 如果start小于零,或者start大于输入序列的长度。
-
lookingAt
public boolean lookingAt()
尝试将输入序列从区域开头开始与模式相匹配。像
matches方法一样,该方法始终从该区域的开头开始; 不同于该方法,它不要求整个区域匹配。如果匹配成功可以通过获得那么更多的信息
start,end,和group方法。- 结果
-
true如果并且仅当输入序列的前缀匹配该匹配器的模式
-
quoteReplacement
public static String quoteReplacement(String s)
返回String的文字替换String。 这种方法产生一个String,将工作作为文字置换s在appendReplacement所述的方法Matcher类。 产生的String将匹配s被视为文字序列的字符序列。 斜杠(''')和美元符号('$')将没有特殊意义。- 参数
-
s- 要被字面化的字符串 - 结果
- 一个文字字符串替换
- 从以下版本开始:
- 1.5
-
appendReplacement
public Matcher appendReplacement(StringBuffer sb, String replacement)
实施非终端附加和替换步骤。此方法执行以下操作:
它从输入序列读取字符,从附加位置开始,并将它们附加到给定的字符串缓冲区。 读取上一个匹配之前的最后一个字符,即索引号
start()-1处的字符1。它将给定的替换字符串附加到字符串缓冲区。
它将该匹配器的附加位置设置为匹配的最后一个字符的索引,加上一个,即
end()。
替换字符串可能包含对上次匹配期间捕获的子序列的引用:每次出现的
${名称}或$g将分别由相应的group(name)或group(g)的评估结果代替。 为$g,则之后的第一数目$始终被视为该组参考的一部分。 如果他们将组成法律团体参考,则将后续数字并入g。 只有数字“0”到“9”被认为是组参考的潜在组件。 例如,如果第二组匹配字符串"foo",则传递替换字符串"$2bar"将导致将"foobar"附加到字符串缓冲器。 一个美元符号($)可以作为替代字符串中的文字包含在反斜杠前面(\$)。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。该方法旨在与
appendTail和find方法一起用于循环。 例如,以下代码将one dog two dogs in the yard写入标准输出流:Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString());- 参数
-
sb- 目标字符串缓冲区 -
replacement- 替换字符串 - 结果
- 这个匹配器
- 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败 -
IllegalArgumentException- 如果替换字符串是指在模式中不存在的命名捕获组 -
IndexOutOfBoundsException- 如果替换字符串是指在模式中不存在的捕获组
-
appendReplacement
public Matcher appendReplacement(StringBuilder sb, String replacement)
实施非终端附加和替换步骤。此方法执行以下操作:
它从输入序列读取字符,从附加位置开始,并将它们附加到给定的字符串构建器。 在读取上一个匹配之前的最后一个字符,即索引号为
start()-1的字符后1。它将给定的替换字符串附加到字符串构建器。
它将此匹配器的附加位置设置为匹配的最后一个字符的索引,加上一个,即
end()。
替换字符串可能包含对上次匹配期间捕获的子序列的引用:每次出现的
$g将被评估结果group(g)。$之后的第一个数字始终被视为组参考的一部分。 如果他们将组成法律团体参考,则将后续数字并入g。 只有数字“0”到“9”被认为是组参考的潜在组件。 例如,如果第二组匹配字符串"foo",则传递替换字符串"$2bar"将导致"foobar"附加到字符串构建器。 可以在替换字符串中包含一个美元符号($)作为文字,然后使用反斜杠(\$)。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。该方法旨在与
appendTail和find方法一起用于循环。 例如,以下代码将one dog two dogs in the yard写入标准输出流:Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuilder sb = new StringBuilder(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString());- 参数
-
sb- 目标字符串构建器 -
replacement- 替换字符串 - 结果
- 这个匹配器
- 异常
-
IllegalStateException- 如果尚未尝试匹配,或者前一个匹配操作失败 -
IllegalArgumentException- 如果替换字符串是指在模式中不存在的命名捕获组 -
IndexOutOfBoundsException- 如果替换字符串是指在模式中不存在的捕获组 - 从以下版本开始:
- 9
-
appendTail
public StringBuffer appendTail(StringBuffer sb)
实施终端附加和替换步骤。此方法从输入序列读取字符,从追加位置开始,并将其附加到给定的字符串缓冲区。 打算在
appendReplacement方法的一次或多次调用后调用,以复制输入序列的其余部分。- 参数
-
sb- 目标字符串缓冲区 - 结果
- 目标字符串缓冲区
-
appendTail
public StringBuilder appendTail(StringBuilder sb)
实施终端附加和替换步骤。此方法从输入序列读取字符,从追加位置开始,并将其附加到给定的字符串构建器。 在
appendReplacement方法的一个或多个调用之后,它将被调用,以便复制输入序列的其余部分。- 参数
-
sb- 目标字符串构建器 - 结果
- 目标字符串构建器
- 从以下版本开始:
- 9
-
replaceAll
public String replaceAll(String replacement)
将与模式匹配的输入序列的每个子序列替换为给定的替换字符串。该方法首先重置此匹配器。 然后扫描输入序列,查找模式的匹配。 不属于任何匹配的字符将直接追加到结果字符串中; 每个匹配在替换字符串的结果中被替换。 替换字符串可能包含对
appendReplacement方法中捕获的子序列的引用 。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与被视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。给定正则表达式
a*b,输入"aabfooaabfooabfoob"和替换字符串"-",在该表达式的匹配器上调用此方法将产生字符串"-foo-foo-foo-"。调用此方法会更改此匹配器的状态。 如果匹配器用于进一步的匹配操作,那么应该首先被重置。
- 参数
-
replacement- 替换字符串 - 结果
- 通过用替换字符串替换每个匹配子序列构造的字符串,根据需要代替捕获的子序列
-
replaceAll
public String replaceAll(Function<MatchResult,String> replacer)
将与模式匹配的输入序列的每个子序列替换为将给定的替换器函数应用于与该子序列相对应的匹配器的匹配结果的结果。 函数抛出的异常被转发给调用方。该方法首先重置此匹配器。 然后扫描输入序列,查找模式的匹配。 不属于任何匹配的字符将直接追加到结果字符串中; 通过应用返回替换字符串的替换函数,在结果中替换每个匹配项。 每个替换字符串可能包含对
appendReplacement方法中捕获的子序列的引用 。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与被视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。给定正则表达式
dog,输入"zzzdogzzzdogzzz"和函数mr -> mr.group().toUpperCase(),在该表达式的匹配器上调用此方法将产生字符串"zzzDOGzzzDOGzzz"。调用此方法会更改此匹配器的状态。 如果匹配器用于进一步的匹配操作,那么应该首先被重置。
替换功能不应在更换期间修改该匹配器的状态。 如果检测到这种修改,这个方法将尽力而为地抛出一个
ConcurrentModificationException。传递给替换器函数的每个匹配结果的状态只有在替换器函数调用的持续时间才被保持为常量,并且仅当替换器函数不修改该匹配器的状态时才保持。
- Implementation Note:
-
此实现将
MatchResult器函数应用于此匹配器,该匹配器是MatchResult的实例。 - 参数
-
replacer- 应用于此匹配器的匹配结果的函数,该匹配结果返回替换字符串。 - 结果
- 通过将每个匹配子序列替换为将匹配子函数应用到匹配子序列的结果来构造的字符串,根据需要代替捕获的子序列。
- 异常
-
NullPointerException- 如果NullPointerException函数为空 -
ConcurrentModificationException- 如果在尽力而为的基础上检测到ConcurrentModificationException功能修改了该匹配器的状态 - 从以下版本开始:
- 9
-
results
public Stream<MatchResult> results()
返回与模式匹配的输入序列的每个子序列的匹配结果流。 匹配结果以与输入序列中的匹配子序列相同的顺序发生。每个匹配结果的产生如
toMatchResult()。此方法不会重置此匹配器。 在该匹配器区域的开始处开始终端流操作时开始匹配,或者如果匹配器尚未被重置,则在与之前的匹配不匹配的第一个字符处。
如果匹配器在终端流操作完成后用于进一步匹配操作,则应首先重新设置。
在执行返回的流的管道期间,不应修改该匹配器的状态。 返回的流的源码
Spliterator是故障快速的 ,如果检测到这样的修改,将尽力而为地抛出一个ConcurrentModificationException。- 结果
- 顺序的匹配结果流。
- 从以下版本开始:
- 9
-
replaceFirst
public String replaceFirst(String replacement)
将与模式匹配的输入序列的第一个子序列替换为给定的替换字符串。该方法首先重置此匹配器。 然后扫描输入序列寻找模式的匹配。 不属于匹配的字符将直接附加到结果字符串中; 匹配在结果中被替换字符串替换。 替换字符串可能包含对
appendReplacement方法中捕获的子序列的引用 。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。给定正则表达式
dog,输入"zzzdogzzzdogzzz"和替换字符串"cat",对该表达式的匹配器上的此方法的调用将产生字符串"zzzcatzzzdogzzz"。调用此方法会更改此匹配器的状态。 如果匹配器用于进一步的匹配操作,那么应该首先被重置。
- 参数
-
replacement- 替换字符串 - 结果
- 通过用替换字符串替换第一匹配子序列构造的字符串,根据需要代替捕获的子序列
-
replaceFirst
public String replaceFirst(Function<MatchResult,String> replacer)
将与模式匹配的输入序列的第一个子序列替换为将给定的替换器函数应用于与该子序列对应的匹配器的匹配结果的结果。 替换功能抛出的异常被转发给调用者。该方法首先重置此匹配器。 然后扫描输入序列寻找模式的匹配。 不属于匹配的字符将直接附加到结果字符串中; 通过应用返回替换字符串的替换函数,在结果中替换匹配项。 替换字符串可能包含对
appendReplacement方法中捕获的子序列的引用 。请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获子序列的引用,反斜杠用于转义替换字符串中的文字字符。给定正则表达式
dog,输入"zzzdogzzzdogzzz"和函数mr -> mr.group().toUpperCase(),对该表达式的匹配器调用此方法将产生字符串"zzzDOGzzzdogzzz"。调用此方法会更改此匹配器的状态。 如果匹配器用于进一步的匹配操作,那么应该首先被重置。
替换功能不应在更换期间修改该匹配器的状态。 如果检测到这种修改,该方法将尽力而为地抛出
ConcurrentModificationException。传递给替换器函数的匹配结果的状态只有在替换器函数调用的持续时间才被保持为常量,并且仅当替换器函数不修改该匹配器的状态时才保持。
- Implementation Note:
-
此实现将
MatchResult器函数应用于此匹配器,该匹配器是MatchResult的实例。 - 参数
-
replacer- 要应用于该匹配器的返回替换字符串的匹配结果的函数。 - 结果
- 通过将第一匹配子序列替换为将匹配子序列应用到匹配子序列的结果来构造的字符串,根据需要代替捕获的子序列。
- 异常
-
NullPointerException- 如果NullPointerException函数为空 -
ConcurrentModificationException- 如果在尽力而为的基础上检测到ConcurrentModificationException功能修改了该匹配器的状态 - 从以下版本开始:
- 9
-
region
public Matcher region(int start, int end)
设置该匹配器区域的限制。 该区域是将被搜索以找到匹配的输入序列的一部分。 调用此方法重置匹配器,然后设置区域由指定的索引处开始start由指定的索引在参数和结束end参数。根据所使用的透明度和锚定(参见
useTransparentBounds和useAnchoringBounds),诸如锚的某些构造可能在该区域的边界处或周围具有不同的表现。- 参数
-
start- 开始搜索的索引(含) -
end- 结束搜索的索引(独占) - 结果
- 这个匹配器
- 异常
-
IndexOutOfBoundsException- 如果start或end小于零,如果start大于输入序列的长度,如果end大于输入序列的长度,或者start大于end。 - 从以下版本开始:
- 1.5
-
regionStart
public int regionStart()
报告该匹配器区域的开始索引。 此匹配器进行的搜索仅限于在regionStart(含)和regionEnd(排他)中找到匹配项 。- 结果
- 这个匹配者地区的起点
- 从以下版本开始:
- 1.5
-
regionEnd
public int regionEnd()
报告该匹配器区域的最终索引(排他)。 此匹配器进行的搜索仅限于在regionStart(含)和regionEnd(排他)中找到匹配项 。- 结果
- 该匹配器区域的终点
- 从以下版本开始:
- 1.5
-
hasTransparentBounds
public boolean hasTransparentBounds()
查询此匹配器的区域边界的透明度。此方法返回
true如果此匹配使用透明边界,false如果它使用不透明边界。有关透明和不透明边界的说明,请参阅
useTransparentBounds。默认情况下,匹配器使用不透明区域边界。
- 结果
-
trueiff这个匹配器是否使用透明边界,否则false。 - 从以下版本开始:
- 1.5
- 另请参见:
-
useTransparentBounds(boolean)
-
useTransparentBounds
public Matcher useTransparentBounds(boolean b)
设置此匹配器的区域边界的透明度。使用参数
true调用此方法将设置此匹配器以使用透明边界。 如果布尔参数为false,则将使用不透明边界。使用透明边界,该匹配器区域的边界对于lookahead,lookbehind和边界匹配结构是透明的。 那些结构可以超越该地区的边界,看看匹配是否合适。
使用不透明边界,该匹配器区域的边界对于可能尝试超越它们的查找,lookbehind和边界匹配结构是不透明的。 这些构造不能超越边界,因此它们将无法匹配该区域之外的任何内容。
默认情况下,匹配器使用不透明边界。
- 参数
-
b- 指示是否使用不透明或透明区域的布尔值 - 结果
- 这个匹配器
- 从以下版本开始:
- 1.5
- 另请参见:
-
hasTransparentBounds()
-
hasAnchoringBounds
public boolean hasAnchoringBounds()
- 结果
-
true如果这个匹配器正在使用锚定边界,否则为false。 - 从以下版本开始:
- 1.5
- 另请参见:
-
useAnchoringBounds(boolean)
-
useAnchoringBounds
public Matcher useAnchoringBounds(boolean b)
设置该匹配器的区域边界的锚定。使用参数
true调用此方法将设置此匹配器以使用锚定边界。 如果布尔参数为false,则将使用非锚定边界。使用锚定边界,该匹配器区域的边界匹配诸如^和$之类的锚点。
没有锚定边界,该匹配器区域的边界将不匹配诸如^和$之类的锚点。
默认情况下,匹配器使用锚定区域边界。
- 参数
-
b- 一个布尔值,表示是否使用固定边界。 - 结果
- 这个匹配器
- 从以下版本开始:
- 1.5
- 另请参见:
-
hasAnchoringBounds()
-
toString
public String toString()
返回此匹配器的字符串表示形式。
Matcher的字符串表示Matcher包含可能对调试有用的信息。 确切的格式是未指定的。
-
hitEnd
public boolean hitEnd()
如果在匹配器执行的最后一次匹配操作中输入的结尾被搜索引擎命中,则返回true。
当此方法返回true时,可能更多的输入会改变上一次搜索的结果。
- 结果
- 如果输入的结尾在最后一场比赛中被击中,则为true; 否则为假
- 从以下版本开始:
- 1.5
-
requireEnd
public boolean requireEnd()
如果更多输入可以将正匹配更改为否定,则返回true。
如果此方法返回true,并且找到匹配,则更多的输入可能会导致匹配丢失。 如果此方法返回false并找到匹配,则更多输入可能会更改匹配,但匹配不会丢失。 如果没有找到匹配项,那么requireEnd就没有意义了。
- 结果
- 如果更多的输入可以将正匹配改变为负值,则为true。
- 从以下版本开始:
- 1.5
-
-