方法匹配不好
我不明白为什么这个正则expression式的方法返回false;
Pattern.matches("\\bi", "an is");
我在字边界的人物!
在Java中, matches
尝试匹配整个string的模式。
对于String.matches
, Pattern.matches
和Matcher.matches
,这是正确的。
如果要检查string中是否有匹配项,可以使用.*\bi.*
。 在这种情况下,作为Javastring文字,它是".*\\bi.*"
。
java.util.regex.Matcher
API链接
-
boolean matches()
:尝试将整个区域与模式匹配。
什么.*
意思
在这里使用的点.
是一个正则expression式元字符,意味着(几乎)任何字符。 *
是一个正则expression式元字符,意思是“零或多个重复”。 因此,例如, A.*B
与A
相匹配,接着是零或多个“any”字符,然后是B
( 参见rubular.com )。
参考
- regular-expressions.info/重复星与加号和点匹配(几乎)任何字符
相关问题
-
.*?
之间的区别 和.*
为正则expression式
请注意,两者.
和*
(以及其他元字符)根据它们出现的位置可能会失去其特殊含义。 [.*]
是一个字符类,可以匹配一个文字周期.
或字面星号*
。 在反斜杠的前面也会转义元字符,因此a\.b
匹配"ab"
。
- regular-expressions.info/ 字符 类和文字字符和元字符
相关的问题
Java没有基于正则expression式的endsWith
, startsWith
和contains
。 您仍然可以使用matches
来完成相同的事情,如下所示:
-
matches(".*pattern.*")
– 是否包含模式匹配的任何地方? -
matches("pattern.*")
– 是否开始与模式的匹配? -
matches(".*pattern")
– 它结束与模式的匹配?
String
API快速备忘单
下面是一个快速的备忘单,列出哪些方法是基于正则expression式的,哪些不是:
- 非正则expression式方法:
-
String replace(char oldChar, char newChar)
-
String replace(CharSequence target, CharSequence replacement)
-
boolean startsWith(String prefix)
-
boolean endsWith(String suffix)
-
boolean contains(CharSequence s)
-
- 正则expression式方法:
-
String replaceAll(String regex, String replacement)
-
String replaceFirst(String regex, String replacement)
-
String[] split(String regex)
-
boolean matches(String regex)
-
如果使用匹配, 整个string必须匹配:
Pattern.matches(".*\\bi.*", "an is")
这允许前后有0个或更多个字符。 要么:
boolean anywhere = Pattern.compile("\\bi").matcher("an is").find();
会告诉你是否有任何子string匹配(在这种情况下是true)。 注意,编译正则expression式然后保持它们可以提高性能。
我不明白为什么Java决定采取与Perl等语言相反的方向,这种语言多年以来一直支持正则expression式。 我扔了标准的Java正则expression式,并开始使用我自己的perl风格的Java正则expression式库称为MentaRegex 。 请参阅下面的正则expression式在Java中的意义。
方法匹配返回一个布尔值,表示我们是否有正则expression式匹配。
matches("Sergio Oliveira Jr.", "/oliveira/i" ) => true
方法匹配返回一个数组与匹配。 所以它不仅告诉你是否有比赛,而且还会返回匹配的组。
match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"]
方法sub允许您使用正则expression式执行replace。
sub("aa11bb22", "s/\\d+/00/g" ) => "aa00bb00"
支持全局和不区分大小写的正则expression式。
match("aa11bb22", "/(\\d+)/" ) => ["11"] match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"] matches("Sergio Oliveira Jr.", "/oliveira/" ) => false matches("Sergio Oliveira Jr.", "/oliveira/i" ) => true
允许你改变转义字符,如果你不喜欢看到这么多'\'。
match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"] match("aa11bb22", "/(#d+)/g", '#' ) => ["11", "22"]