Dzień dobry.
Napisałem niewielki program do porównywania list faktur. Konkretnie, program wczytuje plik wygenerowany przez aplikację internetową banku (zapłacone faktury) i plik wygenerowany przez program fakturujący (wszystkie wystawione faktury), a następnie sprawdza co zostało zapłacone. Problem tkwi w braku konkretnego sposobu zapisu tytułów przelewu (zawierającego nr. faktur/y). Każdy pisze sobie jak mu się podoba. Program jakoś tam wyłuskuje te numery ale popełnia błędy. Chciałem to zrobić przy pomocy boost::regex i pod-wyrażeń. Byłoby ok z dopasowaniem wzorca, jednak ja potrzebuję przechwycić wszystkie wystąpienia/pod-wyrażenia (nr. faktur), a niestety boost regex subexpressions zapamiętuję tylko ostatnie znalezione. Kilka przykładów faktur i wzorców:

    //boost::regex rx( "^\([^0-9]*[0-9]+[/][0-9]+[/][0-9]+\)+.*$" );
    //"1422/11/2010"
    //"f-ra 231/02/2011"
    //"fak/008/01/2011"
    //"fak/305/03/2011 EP 12931"
    //"F-RA VAT 0072/01/2011 f-ra vat 044/01/2011 f-ra vat 041/01/2011"
    //
    //boost::regex rx( "^[^0-9]*\([0-9]+[.]\)+[0-9]+$" );
    //"FV 195.204.236.273.356.368.379"

Jest wprawdzie ta opcja dostępna jako eksperymentalna w nowszych wersjach regex ale ja używam nieco starszej instalowanej z paczek i nie chcę kombinować, dlatego moje pytanie do was:
Czy znacie jakieś biblioteki regex ze wspomnianą wyżej funkcjonalnością, a może w ogóle lepsze pomysły na rozwiązanie tego?
Wszelkie uwagi mile widziane.