我正在使用此处找到的正则表达式 ( link ) 来提取工作正常的域字符串。
正则表达式是
^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$
我想知道,如何更改它才能匹配包含不可打印字符而不是点 (.) 的域?
我知道正则表达式代码就像\x01、\x02 等。 但如果我用其中之一替换点,则正则表达式不再匹配
提前致谢
最佳答案
。将匹配任何单个字符,无论它是否可打印。您当前的组 [A-Za-z0-9-] 对其进行限制。您可以将其更改为“除文字点之外的任何字符”...即 [^.]。
Pattern regex = Pattern.compile("^((?!-)[^.]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$");
System.out.println(regex.matcher("\u0001\u0002\u0003\u0004..com").find()); // => false
System.out.println(regex.matcher("\u0001\u0002\u0003\u0004.com").find()); // => true
System.out.println(regex.matcher("google.com").find()); // => true
如果您尝试验证 IDN(国际域名)的用户输入,请注意有 new gTLDs包含非字母数字字符 示例 .ÎكÉ (.network)。
关于java - 在java中使用正则表达式与不可打印的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963132/