我的目标是匹配第一个0和零后十进制值的所有内容。如果第一个小数位是零,那么我也想匹配小数点。如果没有小数点,则不捕获任何数据。正则表达式积极lookbehind灾难
这里有我想要的一些例子:
180.57// should capture the "0123" on the end
180.570 // should capture the "0" on the end
180.// should capture the ".0123" on the end
180.0 // should capture the ".0" on the end
18// should capture nothing
180 // should capture nothing
如果小数点后第一位是0,则使得比赛很简单:
(\.0.*)
我的问题是第一位小数时匹配地方不是0.我相信积极lookbehind将解决这个问题,但我无法让它正常工作。这里是我尝试过的一个正则表达式:
(?<=^.*\..*)0.*
这个正则表达式最终将在Java中使用。
UPDATE:
我要使用这个表达式摆脱数字的和可能的小数点上使用Java的replaceAll
方法的字符串的结尾。我将通过用空字符串替换捕获组来完成此操作。这是我想要的更好的例子。
String case1 = "180.570123";
String case2 = "180.570";
String case3 = "180.0123";
String case4 = "180.0";
String case5 = "180123";
String case6 = "180";
String result = null;
result = case1.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 180.57
result = case2.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 180.57
result = case3.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 180
result = case4.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 180
result = case5.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 18
result = case6.replaceAll("THE REGEX I NEED", "");
System.out.println(result); // should print 180
此外,我在http://gskinner.com/RegExr/
捕获情况1错误,不捕捉的情况下2或者4。 – ubiquibacon 2012-03-02 14:10:20
@typoknig,已更新。案例1总是匹配正确。 *使用第一个捕获组的内容,而不是整个匹配。* – Qtax 2012-03-02 14:14:39
啊,我明白了。正如你所说的那样,在使用第一个捕获组的内容时它似乎工作正常。非常感谢! – ubiquibacon 2012-03-02 14:54:04