java - 连接多个正则表达式
问题描述
我尝试创建一个与 IPv4 匹配的正则表达式。
我有这个代码
//numbers from 10 to 99
String r10to99 = "[1-9][0-9]";
//numbers from 100 to 199
String r100to199 = "1[0-9][0-9]";
//numbers from 200 to 255
String r200to255 = "2[0-4][0-9]|25[0-5]";
//combine all - numbers from 0 to 255
String r0to255 = "[0-9]|" + r10to99 + "|" + r100to199 + "|" + r200to255;
String regexIP = r0to255 + "[.]" + r0to255 + "[.]" + r0to255 + "[.]" + r0to255;
System.out.println("15.15.15.15".matches(regexIP)); //->false - should be true
System.out.println("15".matches(regexIP)); //->true - should be false
我的问题在regexIP
. 它只匹配从 0 到 255 的数字。比如r0to255
.
如何r0to255
在.(dot)
它们之间连接多个?
r0to255.r0to255.r0to255.r0to255
解决方案
您需要对这些模式进行分组,请参阅固定代码:
String r10to99 = "[1-9][0-9]"; //numbers from 10 to 99
String r100to199 = "1[0-9][0-9]"; //numbers from 100 to 199
String r200to255 = "2[0-4][0-9]|25[0-5]"; //numbers from 200 to 255
//combine all - numbers from 0 to 255
String r0to255 = "(?:[0-9]|" + r10to99 + "|" + r100to199 + "|" + r200to255 + ")";
String regexIP = r0to255 + "(?:[.]" + r0to255 + "){3}";
System.out.println("15.15.15.15".matches(regexIP)); // true
System.out.println("15".matches(regexIP)); // false
在线查看Java 演示
在这里, 将,"(?:[0-9]|" + r10to99 + "|" + r100to199 + "|" + r200to255 + ")"
分组为一个更大的模式(使用非捕获组),不会破坏整个模式。r10to99
r100to199
r200to255
|
该r0to255 + "(?:[.]" + r0to255 + "){3}"
模式实际上是一个r0to255
模式,后面跟着三个序列.
和r0to255
模式。
推荐阅读
- odoo - odoo - 解释 @api.multi - 记录集
- javascript - 括号中的构造函数调用时未定义Javascript原型函数
- wordpress - WordPress中的文件路径不是默认值
- c# - 如何在 WPF 中激活 UserControl 的所有父级(即一个选项卡)
- sql - 使用 sql 查询从数据库中计算百分比(SQL Management Studio 2012)?
- ruby-on-rails - 使用 Turbolinks 5 和 Rails 5 在页面之间重新加载资产
- keras - 如何在 LSTM 自动编码器中计算带有零填充的输入的 softmax
- sql - 如何查询属性的未配对值
- amazon-s3 - 如何将文件从 AWS EFS 复制到 AWS S3?
- google-translation-api - 用于检查我在 Google Translation API 中的余额的 API