Строго говоря, мы не обязаны проверять выражение 1
Мы можем проверить, обнаружен ли частичный шаблон, просматривая его член matched, в данном случае matches[1].matched. Нас интересует следующая ситуация: если значение mat- ches[i].matched равно false, то частичные шаблоны matches[i], у которых нет соответствия, выводятся как пустые строки. Аналогично, если частичный шаблон не существует, например matches[17] для приведенного выше шаблона, то он рассматривается как шаблон, у которого нет соответствия.
Мы применили нашу программу к файлу, содержащему следующие строки:
address TX7784 5 ffff tx 77843 asasasaa ggg TX3456-23456 howdy
zzz TX23456-3456sss ggg TX33456-1234 cvzcv TX7784 5-1234 sdsas xxxTx77845xxx TX1234 5-1234 56
Результат приведен ниже.
pattern: "\w{2}\s*\d{5}(-\d{4})?" i: TX77845 2: tx 77843 5: TX23456-3456 : -3456
6: TX77845-i234 : -i234 7: Tx77845 8: TXi2345-i234 : -i234
Следует подчеркнуть несколько важных моментов.
• Мы не дали себя запутать неверно отформатированным кодом ZIP в строке, начинающейся символами ggg (кстати, что в нем неправильно?).
• В строке, содержащей символы zzz, мы нашли только первый код ZIP (мы ищем только один код в строке).
• В строках 5 и 6 мы нашли правильные суффиксы.
• В строке 7 мы нашли код ZIP, скрытый среди символов xxx.
• Мы нашли (к сожалению?) код ZIP, скрытый в строке TXi2345-i23456. |