我不明白为什么这个正则表达式返回false;
Pattern.matches("\\bi", "an is");
Run Code Online (Sandbox Code Playgroud)
我在角落边界的角色!
pol*_*nts 14
在Java中,matches尝试将模式与整个字符串进行匹配.
这是真的String.matches,Pattern.matches和Matcher.matches.
如果要检查字符串中是否存在匹配项,可以使用.*\bi.*.在这种情况下,作为Java字符串文字,它是".*\\bi.*".
java.util.regex.Matcher API链接boolean matches():尝试将整个区域与模式匹配. .*意思这里使用的点.是一个正则表达式元字符,意思是(几乎)任何字符.*是一个正则表达式元字符,意思是"零次或多次重复".例如A.*B匹配的东西A,接着是"任意"字符的零或多个,然后是B(参见rubular.com).
请注意,.和*(以及其他元字符)可能会失去其特殊含义,具体取决于它们出现的位置.[.*]是一个匹配文字句号.或文字星号的字符类*.在反斜杠之前也会逃脱元字符,所以a\.b匹配"a.b".
Java没有正则表达式为基础的endsWith,startsWith和contains.您仍然可以使用matches以下内容完成相同的操作:
matches(".*pattern.*")- 它是否包含任何地方的模式匹配?matches("pattern.*")- 它是从模式的匹配开始的吗?matches(".*pattern")- 它是以模式的匹配结束的吗?String API快速备忘单这是一个快速备忘单,列出了哪些方法是基于正则表达式的,哪些不是:
在整个字符串中有,如果你用火柴匹配:
Pattern.matches(".*\\bi.*", "an is")
Run Code Online (Sandbox Code Playgroud)
这允许前后有0个或更多字符.要么:
boolean anywhere = Pattern.compile("\\bi").matcher("an is").find();
Run Code Online (Sandbox Code Playgroud)
将告诉您是否有任何子字符串匹配(在这种情况下为true).作为一个注释,编译正则表达式然后保持它们可以提高性能.