java - 在java中使用正则表达式与不可打印的字符

标签 java regex string pattern-matching

我正在使用此处找到的正则表达式 ( 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/

相关文章:

java - Java 税表上的间距

java - 使用 JPA Criteria 查询 API 进行多对多示例

ruby - 在 Ruby 中解析 A​​pache 格式的 URL

java - 查找字符串是否仅包含重复字符的正则表达式是什么?

python - 在 Python 中延迟初始化的字符串

java - Java 方法引用中类型参数的使用

java - 我们可以为一个类只创建一个单一的对象吗?

php - 用于链接颜色的 GUI CSS 解析器/编辑器

python - 替换多个(特殊)字符 - 最有效的方法?

javascript - 将字符串参数转换为一个元素的数组