- java.lang.Object
-
- java.util.regex.Matcher
-
- 实现的所有接口
-
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
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 Matcher
appendReplacement(StringBuffer sb, String replacement)
实现非终端附加和替换步骤。Matcher
appendReplacement(StringBuilder sb, String replacement)
实现非终端附加和替换步骤。StringBuffer
appendTail(StringBuffer sb)
实现终端附加和替换步骤。StringBuilder
appendTail(StringBuilder sb)
实现终端附加和替换步骤。int
end()
返回最后一个字符匹配后的偏移量。int
end(int group)
返回在上一个匹配操作期间由给定组捕获的子序列的最后一个字符之后的偏移量。int
end(String name)
返回在上一个匹配操作期间由给定 named-capturing group捕获的子序列的最后一个字符之后的偏移量。boolean
find()
尝试查找与模式匹配的输入序列的下一个子序列。boolean
find(int start)
重置此匹配器,然后尝试从指定的索引处开始查找与模式匹配的输入序列的下一个子序列。String
group()
返回上一个匹配项匹配的输入子序列。String
group(int group)
返回上一个匹配操作期间给定组捕获的输入子序列。String
group(String name)
返回在上一个匹配操作期间由给定 named-capturing group捕获的输入子序列。int
groupCount()
返回此匹配器模式中捕获组的数量。boolean
hasAnchoringBounds()
查询此匹配器的区域边界的锚定。boolean
hasTransparentBounds()
查询此匹配器的区域边界的透明度。boolean
hitEnd()
如果在此匹配器执行的最后一个匹配操作中搜索引擎命中输入结尾,则返回true。boolean
lookingAt()
尝试将从区域开头开始的输入序列与模式匹配。boolean
matches()
尝试将整个区域与模式匹配。Pattern
pattern()
返回此匹配器解释的模式。static String
quoteReplacement(String s)
返回面值替换String
指定的String
。Matcher
region(int start, int end)
设置此匹配器区域的限制。int
regionEnd()
报告此匹配器区域的结束索引(不包括)。int
regionStart()
报告此匹配器区域的起始索引。String
replaceAll(String replacement)
将具有给定替换字符串的模式匹配的输入序列的每个子序列替换。String
replaceAll(Function<MatchResult,String> replacer)
将与模式匹配的输入序列的每个子序列替换为将给定的替换函数应用于与该子序列对应的此匹配器的匹配结果的结果。String
replaceFirst(String replacement)
将具有给定替换字符串的模式匹配的输入序列的第一个子序列替换。String
replaceFirst(Function<MatchResult,String> replacer)
将与模式匹配的输入序列的第一个子序列替换为将给定的replacer函数应用于与该子序列对应的此匹配器的匹配结果的结果。boolean
requireEnd()
如果更多输入可以将正匹配更改为负匹配,则返回true。Matcher
reset()
重置此匹配器。Matcher
reset(CharSequence input)
使用新的输入序列重置此匹配器。Stream<MatchResult>
results()
返回与模式匹配的输入序列的每个子序列的匹配结果流。int
start()
返回上一个匹配的起始索引。int
start(int group)
返回上一个匹配操作期间给定组捕获的子序列的起始索引。int
start(String name)
返回在上一个匹配操作期间由给定 named-capturing group捕获的子序列的起始索引。MatchResult
toMatchResult()
返回此匹配器的匹配状态为MatchResult
。String
toString()
返回此匹配器的字符串表示形式。Matcher
useAnchoringBounds(boolean b)
设置此匹配器的区域边界的锚定。Matcher
usePattern(Pattern newPattern)
更改Pattern
这Matcher
用来找到匹配。Matcher
useTransparentBounds(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从左到右编制索引,从1开始。 组零表示整个模式,因此表达式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从左到右编制索引,从1开始。 组零表示整个模式,因此表达式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(
米start(),
米end())
是等价的。请注意,某些模式(例如
a*
)与空字符串匹配。 当模式成功匹配输入中的空字符串时,此方法将返回空字符串。- Specified by:
-
group
在界面MatchResult
- 结果
- 与前一个匹配匹配的(可能为空)子序列,以字符串形式
- 异常
-
IllegalStateException
- 如果尚未尝试匹配,或者上一个匹配操作失败
-
group
public String group(int group)
返回上一个匹配操作期间给定组捕获的输入子序列。对于匹配器m ,输入序列s和组索引g ,表达式m。
group(
g)
和s。substring(
米start(
g),
m。end(
g))
是等价的。Capturing groups从左到右编制索引,从1开始。 组零表示整个模式,因此表达式
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()
返回此匹配器模式中捕获组的数量。组0表示按惯例的整个模式。 它不包含在此计数中。
小于或等于此方法返回的值的任何非负整数都保证是此匹配器的有效组索引。
- 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
if且仅当输入序列的前缀与此匹配器的模式匹配时
-
quoteReplacement
public static String quoteReplacement(String s)
返回面值替换String
指定的String
。 此方法生成String
,它将在Matcher
类的appendReplacement
方法中作为文字替换s
。 生成的String
将匹配s
作为文字序列处理的字符序列。 斜杠('\')和美元符号('$')将没有特殊含义。- 参数
-
s
- 要文字化的字符串 - 结果
- 文字字符串替换
- 从以下版本开始:
- 1.5
-
appendReplacement
public Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端附加和替换步骤。此方法执行以下操作:
它从输入序列中读取字符,从追加位置开始,并将它们附加到给定的字符串缓冲区。 它在读取上一个匹配之前的最后一个字符后停止,即索引为
start()
-
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
的字符。它将给定的替换字符串附加到字符串构建器。
它将此匹配器的追加位置设置为匹配的最后一个字符的索引加上一个,即
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)
将与模式匹配的输入序列的每个子序列替换为将给定的替换函数应用于与该子序列对应的此匹配器的匹配结果的结果。 函数抛出的异常被转发给调用者。此方法首先重置此匹配器。 然后它扫描输入序列以寻找模式的匹配。 不属于任何匹配项的字符将直接附加到结果字符串; 通过应用返回替换字符串的replacer函数,在结果中替换每个匹配项。 每个替换字符串可以包含对捕获的子序列的引用,如
appendReplacement
方法中所示。请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。给定正则表达式
dog
,输入"zzzdogzzzdogzzz"
和函数mr -> mr.group().toUpperCase()
,在该表达式的匹配器上调用此方法将产生字符串"zzzDOGzzzDOGzzz"
。调用此方法会更改此匹配器的状态。 如果匹配器将用于进一步的匹配操作,则应首先重置它。
替换器功能不应在替换期间修改此匹配器的状态。 如果检测到此类修改,此方法将尽最大努力抛出
ConcurrentModificationException
。传递给replacer函数的每个匹配结果的状态保证仅在replacer函数调用的持续时间内是常量,并且仅当replacer函数不修改此匹配器的状态时。
- Implementation Note:
-
此实现将replacer函数应用于此匹配器,该匹配器是
MatchResult
的实例。 - 参数
-
replacer
- 要应用于此匹配器的匹配结果的函数,该匹配结果返回替换字符串。 - 结果
- 通过将每个匹配的子序列替换为将匹配子函数应用于匹配的子序列的结果来构造的字符串,根据需要替换捕获的子序列。
- 异常
-
NullPointerException
- 如果replacer函数为null -
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)
将与模式匹配的输入序列的第一个子序列替换为将给定的replacer函数应用于与该子序列对应的此匹配器的匹配结果的结果。 replace函数抛出的异常被转发给调用者。此方法首先重置此匹配器。 然后它扫描输入序列以寻找模式的匹配。 不属于匹配项的字符将直接附加到结果字符串; 通过应用返回替换字符串的replacer函数在结果中替换匹配。 替换字符串可以包含对捕获的子序列的引用,如
appendReplacement
方法中所述。请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同。 如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。给定正则表达式
dog
,输入"zzzdogzzzdogzzz"
和函数mr -> mr.group().toUpperCase()
,在该表达式的匹配器上调用此方法将产生字符串"zzzDOGzzzdogzzz"
。调用此方法会更改此匹配器的状态。 如果匹配器将用于进一步的匹配操作,则应首先重置它。
替换器功能不应在替换期间修改此匹配器的状态。 如果检测到此类修改,此方法将尽最大努力抛出
ConcurrentModificationException
。传递给replacer函数的匹配结果的状态保证仅在replacer函数调用的持续时间内是常量,并且仅当replacer函数不修改此匹配器的状态时。
- Implementation Note:
-
此实现将replacer函数应用于此匹配器,该匹配器是
MatchResult
的实例。 - 参数
-
replacer
- 要应用于此匹配器的匹配结果的函数,该匹配结果返回替换字符串。 - 结果
- 通过将第一匹配子序列替换为将匹配子函数应用于匹配子序列的结果而构造的字符串,根据需要替换捕获的子序列。
- 异常
-
NullPointerException
- 如果replacer函数为null -
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
。默认情况下,匹配器使用不透明区域边界。
- 结果
-
true
iff此匹配器使用透明边界,否则为false
。 - 从以下版本开始:
- 1.5
- 另请参见:
-
useTransparentBounds(boolean)
-
useTransparentBounds
public Matcher useTransparentBounds(boolean b)
设置此匹配器的区域边界的透明度。使用参数
true
调用此方法将设置此匹配器使用透明边界。 如果布尔参数为false
,则将使用不透明边界。使用透明边界,此匹配器区域的边界对于前瞻,后观和边界匹配构造是透明的。 这些结构可以超出区域的边界,看看匹配是否合适。
使用不透明边界,此匹配器区域的边界对于前瞻,后观和边界匹配构造是不透明的,这些构造可能试图超越它们。 这些构造不能超越边界,因此它们将无法匹配区域之外的任何东西。
默认情况下,匹配器使用不透明边界。
- 参数
-
b
- 指示是使用不透明区域还是透明区域的布尔值 - 结果
- 这个匹配
- 从以下版本开始:
- 1.5
- 另请参见:
-
hasTransparentBounds()
-
hasAnchoringBounds
public boolean hasAnchoringBounds()
- 结果
-
true
iff此匹配器正在使用锚定边界,否则为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
-
-