public final class Matcher extends Object implements MatchResult
Pattern
发动机。
匹配器是通过调用模式的matcher
方法从模式创建。一旦创建,匹配器可用于执行匹配操作三种不同:
这些方法中的每一个返回一个布尔值,指示成功或失败。关于一个成功匹配的更多信息可以通过查询得到的匹配状态。
匹配器在其输入的子集称为区域查找匹配。默认情况下,该区域包含所有的匹配的输入。区域可以进行修改,通过theregion
方法和查询通过regionStart
和regionEnd
方法。区域边界与一些模式结构的交互的方式可以改变。更多细节见useAnchoringBounds
和useTransparentBounds
。
这类还定义了方法更换新的字符串匹配的子序列的内容,如果需要的话,可以从比赛结果计算。的appendReplacement
和appendTail
方法可以串联使用,以收集的结果到一个已经存在的字符串缓冲区,或者更方便的replaceAll
方法可以用来创建一个字符串中的每一个匹配的子序列,在输入序列是取代。
一个匹配的显式状态包括开始和结束的最新成功的匹配指数。它还包括开始和输入序列捕获的每个capturing group在模式以及总计数等指标序列的结束。为方便起见,也提供了方法以字符串形式返回这些捕获的子序列。
一个匹配的显式状态最初定义的;试图查询它的任何部分在匹配成功将导致IllegalStateException
被。一个匹配的显式状态重新计算每个匹配操作。
一个匹配的隐状态包括输入字符序列以及添加的位置,最初是零和的appendReplacement
方法更新。
匹配器可以通过调用其reset()
方法或明确的复位,如果一个新的输入序列是理想的,其reset(CharSequence)
方法。重置匹配丢弃它明确的状态信息和设置附加位置为零。
这个类的实例不安全使用多个并发线程。
Modifier and Type | Method and Description |
---|---|
Matcher |
appendReplacement(StringBuffer sb, String replacement)
实现了一个非终端的附加和替换步骤。
|
StringBuffer |
appendTail(StringBuffer 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 |
replaceFirst(String replacement)
取代用替换字符串的模式匹配的输入序列的第一个序列。
|
boolean |
requireEnd()
如果更多的输入可以改变一个积极的匹配成一个负的回报。
|
Matcher |
reset()
这个重置匹配。
|
Matcher |
reset(CharSequence input)
这个重置匹配新的输入序列。
|
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)
设置此匹配区域界限的透明度。
|
public Pattern pattern()
public MatchResult toMatchResult()
MatchResult
返回该匹配的匹配状态。结果是不受在这个匹配进行后续操作。
MatchResult
public Matcher usePattern(Pattern newPattern)
这种方法使该匹配失去关于所发生的最后一场比赛的组信息。在输入匹配的位置保持和最后添加的位置不受影响。
newPattern
-这个匹配使用的新模式
IllegalArgumentException
public Matcher reset()
重置匹配丢弃所有的显式状态信息并将其添加到零的位置。匹配的区域设置为默认的区域,这是整个字符序列。锚定与此匹配的区域边界的透明度的影响。
public Matcher reset(CharSequence input)
重置匹配丢弃所有的显式状态信息并将其添加到零的位置。匹配的区域设置为默认的区域,这是整个字符序列。锚定与此匹配的区域边界的透明度的影响。
input
-新输入的字符序列
public int start()
start
接口
MatchResult
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
public int start(int group)
Capturing groups索引从左到右,在一开始。零组表示整个格局,所以表达m.start(0)相当于m.start()。
start
接口
MatchResult
group
-一个捕获组在匹配模式的指标
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IndexOutOfBoundsException
-如果没有捕获组在给定的索引模式
public int start(String name)
name
-命名捕获组在匹配模式的名称
-1
组捕获,如果匹配成功但集团本身没有任何比赛
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IllegalArgumentException
-如果没有捕获组中具有给定名称的模式
public int end()
end
接口
MatchResult
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
public int end(int group)
Capturing groups索引从左到右,在一开始。零组表示整个格局,所以表达m.end(0)相当于m.end()。
end
接口
MatchResult
group
-一个捕获组在匹配模式的指标
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IndexOutOfBoundsException
-如果没有捕获组在给定的索引模式
public int end(String name)
name
-命名捕获组在匹配模式的名称
-1
如果匹配成功但集团本身没有任何比赛
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IllegalArgumentException
-如果没有捕获组中具有给定名称的模式
public String group()
对于一个输入序列的匹配M,表达m.group()和s.substring(m start(), m.end())是等价的。
值得注意的是,一些模式,例如a*,匹配空字符串。当模式成功地与输入中的空字符串相匹配时,该方法将返回空字符串。
group
接口
MatchResult
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
public String group(int group)
一个匹配M,输入序列,和群G指数,表达m.group(g)和s.substring(m start(g), m.end(g))是等价的。
Capturing groups索引从左到右,在一开始。零组表示整个格局,所以表达m.group(0)相当于m.group()。
如果匹配成功了但组指定不匹配的输入序列的任何部分,然后null返回。请注意,某些群体,例如(a*),匹配空字符串。当这样一个组成功地与输入中的空字符串匹配时,这种方法将返回空字符串。
group
接口
MatchResult
group
-一个捕获组在匹配模式的指标
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IndexOutOfBoundsException
-如果没有捕获组在给定的索引模式
public String group(String name)
如果匹配成功了但组指定不匹配的输入序列的任何部分,然后null返回。请注意,某些群体,例如(a*),匹配空字符串。当这样一个组成功地与输入中的空字符串匹配时,这种方法将返回空字符串。
name
-命名捕获组在匹配模式的名称
IllegalStateException
尚未尝试,或者以前的比赛,操作失败
IllegalArgumentException
-如果没有捕获组中具有给定名称的模式
public int groupCount()
组零表示的是整个模式的约定。它不包括在这个计数中。
任何非负整数小于或等于该方法返回的值必须保证这种匹配有效的组索引。
groupCount
接口
MatchResult
public boolean matches()
如果匹配成功则更多的信息可以通过start,end获得,并group方法。
public boolean find()
这个方法开始在这个匹配的区域,开始或,如果前一个调用的方法是成功的,匹配之后没有复位,在不匹配的第一个字符之前的比赛。
如果匹配成功则更多的信息可以通过start,end获得,并group方法。
public boolean find(int start)
如果匹配成功则更多的信息可以通过start,end获得,并group方法,并随后将find()
方法调用将在不匹配的这种匹配的第一个字符开始。
start
-开始寻找一个匹配指数
IndexOutOfBoundsException
如果开始小于零或如果开始大于输入序列的长度。
public boolean lookingAt()
像matches
方法,这种方法总是从该地区开始;不同的方法,它不需要整个区域匹配。
如果匹配成功则更多的信息可以通过start,end获得,并group方法。
public static String quoteReplacement(String s)
String
字面更换
String
。这种方法产生一个
String
将工作中的
Matcher
班
appendReplacement
方法的文本替换
s
。产生的
String
将比赛视为文字序列
s
字符序列。斜线(\)和美元符号($’)将没有特殊意义。
s
-被激活的字符串
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
-如果替换字符串是一个捕获组中不存在的模式
public StringBuffer appendTail(StringBuffer sb)
此方法读取输入序列的特点,从附加的位置,并将其添加到给定的字符串缓冲区。它的目的是为一个或多个调用后调用的appendReplacement
法复制输入序列的其余部分。
sb
-目标字符串缓冲区
public String replaceAll(String replacement)
该方法首先将这个匹配。然后扫描输入序列寻找模式的匹配。不是任何一个匹配的一部分的字符被直接添加到结果字符串中,每个匹配由替换字符串替换在结果中。替换字符串可能包含引用捕获的子序列在appendReplacement
方法。
注意,反斜杠(\)和美元符号($)在替换字符串中可能导致的结果是不同的比如果它被视为文字的替换字符串。美元符号可以作为参考来捕获的子序列的如上所述,和反斜杠来替换字符串中的字符逃跑。
给定的正则表达式a*b,输入"aabfooaabfooabfoob",和替换字符串"-",这种方法对表达会产生"-foo-foo-foo-"匹配字符串调用。
调用这个方法来改变这个匹配的状态。如果匹配器可用于进一步的匹配操作后应先复位。
replacement
-替换字符串
public String replaceFirst(String replacement)
该方法首先将这个匹配。然后,它扫描输入序列寻找一个匹配的模式。不匹配的字符被直接添加到结果字符串中;替换字符串替换结果中的匹配结果。替换字符串可能包含引用捕获的子序列在appendReplacement
方法。
注意,反斜杠(\)和美元符号($)在替换字符串中可能导致的结果是不同的比如果它被视为文字的替换字符串。美元符号可以作为参考来捕获的子序列的如上所述,和反斜杠来替换字符串中的字符逃跑。
给定的正则表达式dog,输入"zzzdogzzzdogzzz",和替换字符串"cat",这种方法对表达会产生"zzzcatzzzdogzzz"匹配字符串调用。
调用这个方法来改变这个匹配的状态。如果匹配器可用于进一步的匹配操作后应先复位。
replacement
-替换字符串
public Matcher region(int start, int end)
start
参数和最终的
end
参数指定的指数开始。
根据透明度和锚定被使用(见useTransparentBounds
和useAnchoringBounds
),某些结构如锚可能或周围的区域边界的行为不同。
start
-开始搜索的索引(含)
end
-端搜索指数(独家)
IndexOutOfBoundsException
如果开始或结束小于零,如果开始大于输入序列的长度,如果是大于输入序列的长度,或者开始大于结束。
public int regionStart()
regionStart
找到匹配(含)和
regionEnd
(独家)。
public int regionEnd()
regionStart
找到匹配(含)和
regionEnd
(独家)。
public boolean hasTransparentBounds()
此方法返回true如果这个匹配使用透明的界限,false如果它使用不透明界限。
看到一个描述透明和不透明的界限useTransparentBounds
。
默认情况下,匹配器使用不透明的区域边界。
useTransparentBounds(boolean)
public Matcher useTransparentBounds(boolean b)
调用此方法以true争论将这个匹配使用透明的界限。如果布尔参数是false,然后不透明界限将被使用。
使用透明的界限,这种匹配的区域的边界是超前,追溯透明,和边界匹配结构。这些结构可以看到该区域的边界,以查看是否匹配适当。
用不透明的界限,这种匹配的区域的边界是超前,追溯不透明,和边界匹配的结构,可以尝试去超越他们。这些结构不能越过边界,所以他们将无法匹配的区域以外的任何东西。
默认情况下,匹配器使用不透明的界限。
b
-一个布尔值,指示是否使用不透明或透明区域
hasTransparentBounds()
public boolean hasAnchoringBounds()
useAnchoringBounds(boolean)
public Matcher useAnchoringBounds(boolean b)
调用此方法以true争论将这个匹配使用锚定界限。如果布尔参数是false,然后非锚固界限将被使用。
利用锚定界限,这种匹配的区域匹配的边界锚如^美元。
没有固定的界限,这种匹配的区域边界不匹配等^美元锚。
默认情况下,匹配器采用锚固区域的边界。
b
-一个布尔值,指示是否使用锚定界限。
hasAnchoringBounds()
public String toString()
返回该匹配的字符串表示形式。一个Matcher
的字符串表示形式包含可能对调试有用的信息。确切的格式是未指定的。
public boolean hitEnd()
如果输入的结束了最后一场比赛的操作进行匹配的搜索引擎打返回true。
当这个方法返回真实的时候,它是可能的,更多的输入将改变了最后一次搜索的结果。
public boolean requireEnd()
如果更多的输入可以改变一个积极的匹配成一个负的回报。
如果这个方法返回真,一个匹配被发现,那么更多的输入可能导致匹配丢失。如果这个方法返回一个错误和一个匹配被发现,那么更多的输入可能会改变比赛,但比赛不会丢失。如果一场比赛没有被发现,然后requireend没有意义。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.