Oto dane wejściowe:Dodawanie pojedynczego znaku do mojego .NET RegEx powoduje powiesić
*** INVOICE ***
THE BIKE SHOP
1 NEW ROAD, TOWNVILLE,
SOMEWHERE, UK, AB1 2CD
TEL-567890
To: COUNTER SALE No: 243529 Page: 1
Date: 04/06/10 12:00
Ref: Aiden
Cust No: 010000
Tutaj jest regex, który działa (opcje: SingleLine, ignoreWhitespace, skompilowany) - pasuje natychmiast i grupy są prawidłowo wypełniane:
\W+INVOICE\W+
(?<shopAddr>.*?)\W+
To:\W+(?<custAddr>.*?)\W+
No:\W+(?<invNo>\d+).*?
Date:\W+(?<invDate>[0-9/ :]+)\W+
Ref:\W+(?<ref>[\w ]*?)\W+
Cust
jak tylko dodam „n” z Cust Nie do rex, parsowania wejściowych wisi na zawsze:
\W+INVOICE\W+
(?<shopAddr>.*?)\W+
To:\W+(?<custAddr>.*?)\W+
No:\W+(?<invNo>\d+).*?
Date:\W+(?<invDate>[0-9/ :]+)\W+
Ref:\W+(?<ref>[\w ]*?)\W+
Cust N
Jeśli dodać coś jak „charakteru”:
\W+INVOICE\W+
(?<shopAddr>.*?)\W+
To:\W+(?<custAddr>.*?)\W+
No:\W+(?<invNo>\d+).*?
Date:\W+(?<invDate>[0-9/ :]+)\W+
Ref:\W+(?<ref>[\w ]*?)\W+
Cust .
To działa, ale jak tylko dodam stały charakter, Rex zawiesza się ponownie:
\W+INVOICE\W+
(?<shopAddr>.*?)\W+
To:\W+(?<custAddr>.*?)\W+
No:\W+(?<invNo>\d+).*?
Date:\W+(?<invDate>[0-9/ :]+)\W+
Ref:\W+(?<ref>[\w ]*?)\W+
Cust ..:
Może ktoś doradzić dlaczego dodając coś tak trywialny spowodowałby upadek? Czy mogę włączyć śledzenie, aby zobaczyć pasujące działanie, aby zobaczyć, czy utknie ono w katastroficznym backtracku?
Lol repro'd. Zakręcony. – Will
Uwaga: Nie mogłem nawet dopasować RegEx, jeśli używam tego jako wzorca: Cust No ... tak dosłownie słowa "Cust No" nie można znaleźć w danych wejściowych. Ukryłem plik, aby sprawdzić, czy jest w nim coś dziwnego, ale jest to po prostu ASCII. Czy ktoś inny może umieścić te dane jako dane wejściowe i spróbować nawet dopasować "Cust No" jako wzór? – Matt
Zauważam również, że nie zawiesza się, jeśli nie polegam na słowie "Cust" i po prostu zmienia ostatnie wiersze wyrażenia regularnego na: Ref: \ W + (? [\ w] *?). *? Nie: – Matt