为什么这段代码不能正常工作?

abg*_*abg 1 java regex substring matcher pattern-matching

为什么这段代码:

String keyword = "pattern";
String text    = "sometextpatternsometext";
String patternStr = "^.*" + keyword + ".*$"; //
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    int start = matcher.start();
    int end = matcher.end();
    System.out.println("start = " + start + ", end = " + end);
}
Run Code Online (Sandbox Code Playgroud)

start = 0,end = 23

不能正常工作.

但是,这段代码:

String keyword = "pattern";
String text    = "sometext pattern sometext";
String patternStr = "\\b" + keyword + "\\b"; //
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    int start = matcher.start();
    int end = matcher.end();
    System.out.println("start = " + start + ", end = " + end);
}
Run Code Online (Sandbox Code Playgroud)

start = 9,end = 16

工作得很好.

Jim*_*son 8

确实有效.你的模式

^.*pattern.*$
Run Code Online (Sandbox Code Playgroud)

说匹配:

  1. 从头开始
  2. 接受任意数量的字符
  3. 后跟字符串 pattern
  4. 后跟任意数量的字符
  5. 直到字符串结束

结果是整个输入字符串.如果你只想找到这个单词pattern,那么正则表达式就只是单词本身,或者你发现的,用字边界元字符括起来.