我正在用Java写一个正则表达式,我试图找到字符串中css "margin:" shorthand property的底部边距,看看它是否为负数。 margin属性可以指定为1,2,3或4个值,以 px , em 或%结尾,值可能为负值和/或以点开头。值之间用一个或多个空格分隔。到目前为止所尝试的是这样的正则表达式:
//E.g. style may look like "... margin: 10px 2px" or "... margin: -.10em 1em 2em" etc.
public void findMargin(String style)
{
Pattern compile = Pattern.compile("margin:\\s*(-?\\.?\\d+(?:em|px|%)\\s*){1,4}");
Matcher matcher = compile.matcher(style);
while (matcher.find())
{
.....
}
}
我有问题找到提取底部边距属性。任何人都有关于如何实现这一目标的一些意见?
答案 0 :(得分:2)
我倾向于从单个组中获取整个属性,然后执行简单的字符串拆分以获取单个值。
答案 1 :(得分:0)
可能更冗长,但也更具可读性?
// sample input string
String style = "...margin: -.10px 1px 2px;...";
// pre-compile patterns
Pattern marginPattern = Pattern.compile("margin:([^;]+);");
Pattern valuePattern = Pattern.compile("([\\-\\.\\d]+)(em|px|%)");
// first step, find margin property...
Matcher marginMatcher = marginPattern.matcher(style);
while (marginMatcher.find()) {
// second step, extract individual numeric values
String marginPropertyValue = marginMatcher.group(1).trim();
Matcher valueMatcher = valuePattern.matcher(marginPropertyValue);
while (valueMatcher.find()) {
String number = valueMatcher.group(1);
String unit = valueMatcher.group(2);
doSomethingWith(number, unit);
}
}
答案 2 :(得分:0)
这是我编写的代码,用于从css margin速记属性中找到底部边距:
Pattern compile1 = Pattern.compile("margin:\\s*((-?\\.?\\d+(?:em|px|%)\\s*){1,4})");
Matcher matcher1 = compile1.matcher(style);
if (matcher1.find())
{
String[] split = matcher1.group(1).trim().split("\\s+");
String marginBottom;
if (split.length < 3)
{
marginBottom = split[0];
} else
{
marginBottom = split[2];
}
if (marginBottom.contains("-"))
{
System.err.println("Bottom margin is negative " + marginBottom);
}
}