试图为罗马数字编写正则表达式匹配器.在sed中(我认为它被认为是正则表达式的"标准"),如果你有多个由交替运算符分隔的选项,它将匹配最长的.即,"I|II|III|IV"将"IV"与"IV"匹配,将"III"与"III"匹配
在Java中,相同的模式匹配"I"代表"IV"而"I"代表"III".从左到右,交替匹配之间的Java选择; 也就是说,因为"I"出现在正则表达式中的"III"之前,所以它匹配.如果我将正则表达式更改为"IV|III|II|I",则行为会得到纠正,但这显然不是一般的解决方案.
有没有办法让Java从一个交替组中选择最长的匹配,而不是选择"第一个"?
为清晰起见,代码示例:
public static void main(String[] args)
{
Pattern p = Pattern.compile("six|sixty");
Matcher m = p.matcher("The year was nineteen sixty five.");
if (m.find())
{
System.out.println(m.group());
}
else
{
System.out.println("wtf?");
}
}
Run Code Online (Sandbox Code Playgroud)
这输出 "six"
情况:有一个固定高度的父div overflow: auto和足够高的子"line-item"div足以触发滚动条的存在.这些子div中的每一个都具有tabindex = -1,因此可以以编程方式聚焦.
当这些子div中的任何一个以编程方式聚焦时,浏览器的默认行为(在这种情况下,Chrome 55)似乎是滚动父div以使新聚焦的子中心居中.有什么方法可以防止这种行为吗?