我有模式[a-z0-9]{9}|[a-z0-9]{11}
在这里,我必须解析该正则表达式以获取9和11,以便将来收到消息“ U必须输入9或11个符号”
我也有正则表达式
[a-z0-9]{9}
[a-z0-9]{9,}
[a-z0-9]{9,11}
我需要编写一些方法,该方法可以解析所有字符串以获取可用符号数。
我做到了
Pattern.compile(".*\\{(\\d+)(,?)(\\d*)\\}(\\|.*\\{(\\d+)\\})?");
在我的第一个模式中仅找到最后一个数字。但是其他人不认识。
如何检查所有字符串?
已更新:
我听不懂,但是在Java第一种模式中答案
\{(\d+)(?:,(\d*))?\}
不匹配,但找到3个我的字符串。但是找不到第一个和最长的字符串。
匹配和查找之间有什么区别?
以及为什么该模式可以在Web中找到匹配项,而在Java中找不到呢?
有时候我会
matcher.find(); // return 2 matcher.group(1); // No match found exception
答案 0 :(得分:1)
此正则表达式should work为您:[^\\](?:\\\\)*\{(\d+)(?:,(\d*))?\}
。
第[^\\](?:\\\\)*
部分解决了斜杠转义的情况。
以下是Java代码示例:
public static void main(String[] args) {
Pattern p = Pattern.compile("[^\\\\](?:\\\\\\\\)*\\{(\\d+)(?:,(\\d*))?\\}");
String testInput = "[a-z0-9]{1,2}|[a-z0-9]{3,}|[a-z0-9]{4}";
Matcher matcher = p.matcher(testInput);
while (matcher.find()){
System.out.println("Next matching found:");
if(matcher.group(2) == null){
System.out.println("Strict: " + matcher.group(1));
}else {
System.out.println("Min: "
+ matcher.group(1)
+ ", Max: "
+ ("".equals(matcher.group(2)) ? "Infinte" : matcher.group(2)));
}
}
}
输出:
Next matching found:
Min: 1, Max: 2
Next matching found:
Min: 3, Max: Infinte
Next matching found:
Strict: 4