方法匹配不好

我不明白为什么这个正则expression式的方法返回false;

Pattern.matches("\\bi", "an is"); 

我在字边界的人物!

在Java中, matches尝试匹配整个string的模式。

对于String.matchesPattern.matchesMatcher.matches ,这是正确的。

如果要检查string中是否有匹配项,可以使用.*\bi.* 。 在这种情况下,作为Javastring文字,它是".*\\bi.*"

java.util.regex.Matcher API链接

  • boolean matches() :尝试将整个区域与模式匹配。

什么.*意思

在这里使用的点. 是一个正则expression式元字符,意味着(几乎)任何字符。 *是一个正则expression式元字符,意思是“零或多个重复”。 因此,例如, A.*BA相匹配,接着是零或多个“any”字符,然后是B ( 参见rubular.com )。

参考

  • regular-expressions.info/重复星与加号和点匹配(几乎)任何字符

相关问题

  • .*?之间的区别 和.*为正则expression式

请注意,两者.* (以及其他元字符)根据它们出现的位置可能会失去其特殊含义。 [.*]是一个字符类,可以匹配一个文字周期. 或字面星号* 。 在反斜杠的前面也会转义元字符,因此a\.b匹配"ab"

  • regular-expressions.info/ 字符 类和文字字符和元字符

相关的问题

Java没有基于正则expression式的endsWithstartsWithcontains 。 您仍然可以使用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"]