Mam wyrażenie regularne, o którym sądziłem, że do tej pory działa poprawnie. Muszę dopasować opcjonalną postać. Może tam być lub nie.
Oto dwie struny. Górna struna jest dopasowana, a dolna nie. Brak pojedynczej litery w dolnym łańcuchu jest przyczyną niepowodzenia.
Chciałbym uzyskać pojedynczą literę po pierwszych 5 cyfrach, jeśli tam jest, a jeśli nie, kontynuuj pobieranie pozostałej części ciągu. Ten list może być A-Z
.
Jeśli usunę ([A-Z]{1}) +.*? +
z wyrażenia regularnego, będzie pasować do wszystkiego, czego potrzebuję, z wyjątkiem litery, ale jest to dość ważne.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Oto wyrażenie regularne, którego używam.
/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
Możesz ustawić pojedynczą literę jako opcjonalną, dodając
?
po niej jako:Kwantyfikator
{1}
jest zbędny, więc możesz go porzucić.źródło
Musisz również oznaczyć pojedynczą literę jako opcjonalną:
lub uczyń całą część opcjonalną
źródło
Możesz także użyć prostszego wyrażenia regularnego zaprojektowanego dla twojego przypadku, na przykład
(.*)\/(([^\?\n\r])*)
gdzie$2
pasuje do tego, co chcesz.źródło