我正在嘗試編寫正則表達式,但在某些情況下無法正常工作。這裏是正則表達式正則表達式匹配最短匹配而不是最長
(\/[ABCGIKLNPRSUV])?(\/RC-[A-Z0-9]{2,6})?
的匹配可能是由以下
- /R/RC-ABC123
- /R
- /RC-ABC123
的之一以上正則表達式適用於/ R和/ R/RC-ABC123,但不適用於/ RC-ABC123。對於/ RC-ABC123,它將與第一組而不是第二組匹配,並僅將/ R作爲匹配組件。
如何讓它適用於所有情況。此外,上述表達式只是完整表達式的一部分,即在RC-ABC123之後可能有另一個(第三)組。但是要先讓這兩個團隊工作。
更新 該??似乎在regex101中工作,但不在java中。我用下面的代碼
Pattern pattern = Pattern.compile("(/[A-Z])??(/RC-[A-Z0-9]{2,6})?");
Matcher matcher = pattern.matcher("/R/RC-ABC12345");
if(matcher.find()) {
for(int i=1; i<= matcher.groupCount(); i++) {
System.out.println("Group("+i+") = " + matcher.group(i));
}
}else {
System.out.println("Pattern does not match");
}
僅供參考而已,它所以它在這一點上做的第一個可選的小組賽。你有沒有嘗試添加錨點'^'和'$',所以它*必須*匹配一個完整的條目? – usr2564301
試試['(/R(?:C-[A-Z0-9]{2,6})?)()(/[ABCGIKLNPSUV])?"](https:regex101.com/r/xA9fA2/1 )。請注意,在Java正則表達式中,您不需要轉義'/'。 –
你可以使用'??'而不是'?'來代替'?'來製作一個非貪婪的選項。 – Barmar