jlink can use String.replace instead of String.replaceAll as regex find/replacement is not needed in those cases.
share/classes/jdk/tools/jlink/internal/ImageResourcesTree.java
303│ return pkg.replaceAll("/", ".");
share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java
220│ .map(m -> m.group("tag").replaceAll("_", "-")),
253│ List<String> files = new ArrayList<>(includeLocaleFiles(tag.replaceAll("-", "_")));
All three are simple string find/replacement cases (no regex) and so String.replace(String, String) can be used.
share/classes/jdk/tools/jlink/internal/ImageResourcesTree.java
303│ return pkg.replaceAll("/", ".");
share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java
220│ .map(m -> m.group("tag").replaceAll("_", "-")),
253│ List<String> files = new ArrayList<>(includeLocaleFiles(tag.replaceAll("-", "_")));
All three are simple string find/replacement cases (no regex) and so String.replace(String, String) can be used.