Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中用于解析货币的正则表达式_Java_Regex - Fatal编程技术网

Java中用于解析货币的正则表达式

Java中用于解析货币的正则表达式,java,regex,Java,Regex,我正在寻找用于解析货币金额的正则表达式。字符串s10不应匹配。有人能帮忙吗,或者有人能简化正则表达式吗?这是我的尝试: publicstaticstring[]getMoney(字符串s){ List ret=new ArrayList(); String regex=“(\\d{1,3}[,]?)(\\d{3}[,]?)*[,]\\d{1,2})(\\d}$)”; Pattern pat=Pattern.compile(regex); 匹配器垫=匹配器; while(mat.find()){

我正在寻找用于解析货币金额的正则表达式。字符串
s10
不应匹配。有人能帮忙吗,或者有人能简化正则表达式吗?这是我的尝试:

publicstaticstring[]getMoney(字符串s){
List ret=new ArrayList();
String regex=“(\\d{1,3}[,]?)(\\d{3}[,]?)*[,]\\d{1,2})(\\d}$)”;
Pattern pat=Pattern.compile(regex);
匹配器垫=匹配器;
while(mat.find()){
再添加(材料组(1));
}
返回ret.toArray(新字符串[0]);
}
公共静态void main(字符串[]args){
字符串s1=“0,1”;//应匹配
字符串s2=,1;//不应匹配
字符串s3=“1,”;//不应匹配
字符串s4=“1.234,01”;//应匹配
字符串s5=“1234,10”//应匹配
字符串s6=“1234100”;//不应匹配
字符串s7=“1234,10a”;//应匹配
字符串s8=“123456789.10”;//应匹配
字符串s9=“123.456.789,10”//应匹配
字符串s10=“123456.789,10”//不应匹配(!)
System.out.println(Arrays.toString(getMoney(s1));
System.out.println(Arrays.toString(getMoney(s2));
System.out.println(Arrays.toString(getMoney(s3));
System.out.println(Arrays.toString(getMoney(s4));
System.out.println(Arrays.toString(getMoney(s5));
System.out.println(Arrays.toString(getMoney(s6));
System.out.println(Arrays.toString(getMoney(s7));
System.out.println(Arrays.toString(getMoney(s8));
System.out.println(Arrays.toString(getMoney(s9));
System.out.println(Arrays.toString(getMoney(s10));
}
我想你可以用

(?<![\d,.])(?:\d{1,3}(?:(?=([.,]))(?:\1\d{3})*)?|\d+)(?:(?!\1)[.,]\d{1,2})?(?![,.\d])

为什么这是字符串s7=“1234,10a”应该匹配?这能解决您的问题吗?(可能重复)@ikos23因为有一个字符串,它包含有效的金额。所以,您不希望匹配没有小数部分的数字,对吗?小数点分隔符后的两位数字必须存在?@hradecek Loamhoof答案中的正则表达式只匹配点分隔的值……谢谢Wiktor Stribiżew,我必须理解这一点,因为我无法立即理解,而且这可能是解决方案。
String regex = "(?<![\\d,.])(?:\\d{1,3}(?:(?=([.,]))(?:\\1\\d{3})*)?|\\d+)(?:(?!\\1)[.,]\\d{1,2})?(?![,.\\d])";