Regex as Predicate

学习如何将正则表达式编译到java.util.function.Predicate中。当您想要对匹配的符号执行某些操作时,这可能很有用。

将正则表达式转换为断言

我有不同域名的电子邮件列表,我只想对域名为example.com的电子邮件ID 进行一些操作。

现在使用Pattern.compile().asPredicate()方法从编译的正则表达式获取断言。该断言可以与lambda表达式一起使用,以将其应用到每个符号上。

  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.function.Predicate;
  4. import java.util.regex.Pattern;
  5. import java.util.stream.Collectors;
  6. public class RegexPredicateExample {
  7. public static void main(String[] args) {
  8. // Compile regex as predicate
  9. Predicate<String> emailFilter = Pattern
  10. .compile("^(.+)@example.com$")
  11. .asPredicate();
  12. // Input list
  13. List<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com",
  14. "cat@google.com", "david@example.com");
  15. // Apply predicate filter
  16. List<String> desiredEmails = emails
  17. .stream()
  18. .filter(emailFilter)
  19. .collect(Collectors.<String>toList());
  20. // Now perform desired operation
  21. desiredEmails.forEach(System.out::println);
  22. }
  23. }

输出:

  1. alex@example.com
  2. david@example.com

使用Pattern.matcher()使用正则表达式

如果要使用旧的Pattern.matcher(),那么可以使用下面的代码模板。

  1. public static void main(String[] args)
  2. {
  3. Pattern pattern = Pattern.compile("^(.+)@example.com$");
  4. // Input list
  5. List<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com",
  6. "cat@google.com", "david@example.com");
  7. for(String email : emails)
  8. {
  9. Matcher matcher = pattern.matcher(email);
  10. if(matcher.matches())
  11. {
  12. System.out.println(email);
  13. }
  14. }
  15. }

输出:

  1. alex@example.com
  2. david@example.com

欢迎在评论部分告诉我你的疑问。

学习愉快!