正则表达式 - 使用java-8在文件中查找模式

时间:2017-06-25 23:15:19

标签: java regex java-8

我从类似的问题中找到了以下解决方案。这是链接:

Find pattern in files with java 8

   Pattern p = Pattern.compile("is '(.+)'");
    stream1.map(p::matcher)
         .filter(Matcher::matches)
         .findFirst()
         .ifPresent(matcher -> System.out.println(matcher.group(1)));

这是khelwood给出的解决方案。这对我来说非常有用。但我不知道它为什么不打印任何东西。

我正在尝试匹配“'”之后的任何内容。

我的输入文件包含以下行:

my name is tom
my dog is hom.

我需要打印

tom
hom.

但没有打印

2 个答案:

答案 0 :(得分:3)

由于Stream#findFirst返回了流中第一个满意的元素,因此您无法获得所有结果,请改为使用Stream#forEach

您应该删除根本没有出现的符号 ' ,并将Matcher#matches替换为Matcher#find,因为{{1} }将匹配整个输入。例如:

Matcher#matches

答案 1 :(得分:1)

只需删除正则表达式中的单引号即可。我假设,因为你说你想要匹配任何事情后,如果没有任何内容,你可能想要打印一个空白'是&#39 ;;因此,'。*'而不是'。+'在我使用的正则表达式中。

这应该有用。

/* Execute a command line. */
int
execute_line (line)
     char *line;
{
  register int i;
  COMMAND *command;
  char *word;

  /* Isolate the command word. */
  i = 0;
  while (line[i] && whitespace (line[i]))
    i++;
  word = line + i;

  while (line[i] && !whitespace (line[i]))
    i++;

  if (line[i])
    line[i++] = '\0';

  command = find_command (word);

  if (!command)
    {
      fprintf (stderr, "%s: No such command for FileMan.\n", word);
      return (-1);
    }

  /* Get argument to command, if any. */
  while (whitespace (line[i]))
    i++;

  word = line + i;

  /* Call the function. */
  return ((*(command->func)) (word));
}