我知道/?意味着/是可選的。那麼「玩具?」將匹配玩具和玩具。我的理解是,如果我懶得使用「玩具??」我會匹配玩具和玩具,並始終返回玩具。因此,快速測試:Java正則表達式兩個問號(??)
private final static Pattern TEST_PATTERN = Pattern.compile("toys??", Pattern.CASE_INSENSITIVE);
public static void main(String[] args) {
for(String arg : args) {
Matcher m = TEST_PATTERN.matcher(arg);
System.out.print("Arg: " + arg);
boolean b = false;
while (m.find()) {
System.out.print(" {");
for (int i=0; i<=m.groupCount(); ++i) {
System.out.print("[" + m.group(i) + "]");
}
System.out.print("}");
}
System.out.println();
}
}
是的,它看起來像它按預期工作
java -cp .. regextest.RegExTest toy toys
Arg: toy {[toy]}
Arg: toys {[toy]}
現在,改變正則表達式「玩具?2」,它仍然匹配toys2和toy2。在這兩種情況下,它都會返回整個字符串,而不會刪除。搜索「玩具?2」和「玩具?? 2」有什麼功能上的區別。
我要求的原因是因爲我發現等的例子如下:
private final static Pattern TEST_PATTERN = Pattern.compile("</??tag(\\s+?.*?)??>", Pattern.CASE_INSENSITIVE);
,雖然我看到使用沒有明顯的原因??而不是?,我認爲也許原來的作者(誰不知道我)可能知道我沒有的東西,我期待着後者。
@remus:它在Java中有效 – nhahtdh
爲什麼它不應該是有效的?這是對'?'的一個懶惰修改。 – raina77ow
@nhahtdh奇怪,我從來沒有聽說過這樣的事情。鏈接? – brandonscript