Я пытаюсь использовать prxmatch для проверки правильности формата почтового индекса (Великобритания). ('/ ^ [AZ] {1,2} \ d {2,3} [AZ] {2} | [AZ] {1,2} \ d [AZ] \ d [AZ] {2} $ /') бит охватывает (я думаю) все возможные форматы почтовых индексов, используемые в Великобритании, однако мне нужны только точные, а не частичные совпадения и никаких дополнительных символов до или после совпадения.
data pc_flag ; set abc ;
format pc_correct_flag $1. compressed_postcode $100.;
compressed_postcode = compress(postcode);
pc_regex = prxparse('/^[A-Z]{1,2}\d{2,3}[A-Z]{2}|[A-Z]{1,2}\d[A-Z]\d[A-Z]{2}$/');
if prxmatch(pc_regex,compressed_postcode)>0
then pc_correct_flag='Y';
else pc_correct_flag='N';run;
Я ожидал' Y'только для точных совпадений с полной строкой, то есть без дополнительных символов до и после регулярного выражения. Тем не менее, я также получаю ложные срабатывания, где часть 'сжатого_посткода' соответствует регулярному выражению, но после совпадения есть дополнительные символы, которые, как я думал, предотвратит использование $. Т.е. я ожидаю, что будет соответствовать только что-то вроде AA11AA, но не AA11AAAAЯ подозреваю, что это связано с позиционированием $, но не могу понять, что именно не так. Есть идеи, что я пропустил?