У меня есть регулярное выражение, которое я думал, работает правильно до сих пор. Мне нужно сопоставить дополнительный символ. Это может быть там или не может.
Вот две строки. Верхняя строка совпадает, а нижняя - нет. Отсутствие единственной буквы в нижней строке - вот что делает его неудачным.
Я хотел бы получить одну букву после начальных 5 цифр, если она есть, а если нет, продолжить получать оставшуюся строку. Это письмо может быть A-Z
.
Если я удалю ([A-Z]{1}) +.*? +
из регулярного выражения, он будет соответствовать всем, что мне нужно, кроме буквы, но это важно.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Вот регулярное выражение, которое я использую.
/^([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})/
Вы можете сделать одну букву необязательной, добавив
?
после нее как:Квантификатор
{1}
является избыточным, поэтому вы можете удалить его.источник
Вы также должны пометить одну букву как дополнительную:
или сделать всю часть необязательной
источник
Вы также можете использовать более простое регулярное выражение, разработанное для вашего случая, например,
(.*)\/(([^\?\n\r])*)
где$2
соответствовать тому, что вы хотите.источник