我承认我不是正则表达式专家,但是想要验证输入字符串并编写if / else语句以进行各种验证并不是这样做的方法。我正在使用Java。
输入将以冒号(:)的形式分隔三个值的元组。第一个值是一个整数(在大小/长度方面可能很长),其他两个值是数字或字符串。
例如,以下值有效:
..而这些不会:
使用正则表达式验证此输入是否有相对简单的方法?
答案 0 :(得分:1)
对于可以混合第2和第3值的情况:
/^[0-9]+:[0-9a-zA-Z]+:[0-9a-zA-Z]+$/
对于只能是字符串或只是数字的情况:
/^[0-9]+:([0-9]+)|([a-zA-Z]+):([0-9]+)|([a-zA-Z]+)$/
答案 1 :(得分:1)
我建议如下:
^[0-9]+:[^:]+:[^:]+
行首,后跟数字,后跟冒号后跟任意数量的非冒号字符,后跟冒号后跟非冒号字符。
这应该是以数字开头的最灵活的以冒号分隔的格式。
答案 2 :(得分:1)
Numbers:(letters OR numbers):(letters OR numbers)
如果你想要它只是第2和第3部分的数字或字母,你可以使用这种模式:
String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";
基本上它会查找一系列数字(\\d+
),然后是两次重复的字符序列:
:
开头,然后是。{
[A-Za-z]
,或 ^
和$
字符是锚点,意思是“字符串开头”和“字符串结束”
示例:
public class RegexTest {
public static void Main(String[] args) {
String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";
String example = "333:abc:123456";
if (example.matches(pattern)) {
System.out.println("Matches");
}
}
}
Numbers:(both letters and numbers:(both letters and numbers)
为此,您可以使用此模式:
String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";
哪个匹配:
public class RegexTest {
public static void Main(String[] args) {
String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";
String example = "333:a3b4c:12adf3456";
if (example.matches(pattern)) {
System.out.println("Matches");
}
}
}
此示例将匹配。
答案 3 :(得分:0)
/\d+:\[a-zA-Z0-9]+:\[a-zA-Z0-9]+/
如果您知道可以做的最大长度
/\d{1,X}:[a-zA-Z0-9]{1,Y}:[a-zA-Z0-9]{1,Z}/
答案 4 :(得分:0)
如果您的字符串可能在引用的字符串中包含冒号,请执行以下操作:
1234:"Ratio is 1:20":"Fuel:Oil"
然后你需要解决字符串中的冒号。在Barton Chittenden的回答基础上,您可以使用:
^(\d+):(".+?"|[^"][^:]*):(".+?"|[^"][^:]*)$
See it on regexr。对于像123:":"
这样的愚蠢的事情,它会分解,但你也可以修改正则表达式来处理这些边缘情况。