方法匹配不好用

xde*_*000 6 java regex

我不明白为什么这个正则表达式返回false;

Pattern.matches("\\bi", "an is");
Run Code Online (Sandbox Code Playgroud)

我在角落边界的角色!

pol*_*nts 14

在Java中,matches尝试将模式与整个字符串进行匹配.

这是真的String.matches,Pattern.matchesMatcher.matches.

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

java.util.regex.Matcher API链接


什么.*意思

这里使用的点.是一个正则表达式元字符,意思是(几乎)任何字符.*是一个正则表达式元字符,意思是"零次或多次重复".例如A.*B匹配的东西A,接着是"任意"字符的零或多个,然后是B(参见rubular.com).

参考

相关问题

请注意,.*(以及其他元字符)可能会失去其特殊含义,具体取决于它们出现的位置.[.*]是一个匹配文字句号.或文字星号的字符类*.在反斜杠之前也会逃脱元字符,所以a\.b匹配"a.b".


相关问题

Java没有正则表达式为基础的endsWith,startsWithcontains.您仍然可以使用matches以下内容完成相同的操作:

  • matches(".*pattern.*")- 它是否包含任何地方的模式匹配?
  • matches("pattern.*")- 它是从模式的匹配开始的吗?
  • matches(".*pattern")- 它是以模式的匹配结束的吗?

String API快速备忘单

这是一个快速备忘单,列出了哪些方法是基于正则表达式的,哪些不是:


Mat*_*hen 5

整个字符串中有,如果你用火柴匹配:

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).作为一个注释,编译正则表达式然后保持它们可以提高性能.