java - jackson YAML : mapping a regex Pattern with flags

标签 java regex jackson yaml

在 jackson ,I can map YAML 中的字符串:

regexField: "(\\d{2}):(\\d{2})"

到类上的 Pattern 字段:

final class MappedFromYaml {
    private Pattern regexField;
    // ... accessors
}

Jackson 的ObjectMapper 将创建一个带有默认标志的Pattern。是否可以使用设置的特定标志(例如 Pattern.MULTILINE)来创建它?理想情况下,我希望能够在 YAML 中指定这些标志,但如果做不到这一点,我们也会赞赏在 Java 代码中为特定字段指定标志的解决方案。

最佳答案

有两种方法。第一个是直接嵌入标志 into the regex :

regexField: "(\\d{2}):(\\d{2})(?m)"

否则不要直接映射到Pattern,而是引入一个自定义类型,例如PatternBuilder

public class PatternBuilder {
  public String regex;
  public boolean multiline;
  public Pattern pattern() {
    int flags = 0;
    if (multiline) flags |= Pattern.MULTILINE;
    return Pattern.compile(regex, flags);
  }
}

可以从 YAML 构建

pattern:
  regex: "(\\d{2}):(\\d{2})"
  multiline: true

关于java - jackson YAML : mapping a regex Pattern with flags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37565029/

相关文章:

java - Jackson vs. Spring HATEOAS vs. 多态性

java - 如何忽略 jackson 注释?

java - 如何将 gradle java 项目添加为 Android Studio 的依赖项

java - 如何在 CQ5 中执行 JSP 之前调用 Servlet/Filter?

java - 有没有办法干净地删除 IntelliJ 中的项目?

java - 字符串到日期转换的问题

java - 匹配器。如何获取找到的组的索引?

c# - 简单的电话号码正则表达式,以零开头(可选),没有分隔符

java - 将 JSON 对象数组反序列化为 Java 中的根对象?

php - REGEX 表示逗号分隔的字符串中不存在的数字