Мне нужно сопоставить любое число, заканчивающееся на 1, кроме чисел, заканчивающихся на 11. Я использую awk.Чтобы проиллюстрировать, правильно работают следующие строки:
if ( max ~ /1$/ && max !~ /11$/ ) { print max }
или с использованием регулярного выражения:
if ( max ~ /[^1]1$|^1$/ ) { print max }
или с гораздо более медленным вариантом того же регулярного выражения:
([^1]|^)1$
Я действительно подозреваю, что только эта часть (с модификацией) должна работать как-то.Это красиво, коротко и читабельно, выполняет работу намного меньше шагов, чем вышеприведенные комбинации, работает для всех чисел с 2 цифрами больше, но не для самой 1.Который я исправил выше, но предпочел бы лучший (если есть).Мне действительно нужно, чтобы он работал для 1-3-значных чисел, но я бы предпочел не ограничивать его.
[^1]1$
Как только я попробую квантификаторы исправить это, он не будет работать правильно.Он либо начинает выбирать первые 1 (например, 1211 совпадает, но не должен), либо теряет однозначное число 1 в качестве совпадения.Очевидно, моя проблема заключается в том, что я должен соответствовать концу числа.Как сделать лучшее регулярное выражение?
Контрольные примеры: Совпадающие числа:
1
21
31
121
131
1021
пропускать (не совпадать) числа, заканчивающиеся на 11, например:
11
111
211
1011
1211