Це, до речі, підсумок Google Analytics.
Я хочу виключити число "8" і число "12" (дванадцять) зі співпадіння.
Це найкраще, що я міг придумати поки що, але це не правильно:
[^((12)|8)]
За даними regexpal.com, це все ще виключає 1, 2 та 8 — а не 12 та 8.
EDIT: Щоб відповісти на коментарі нижче мого питання,дані завжди будуть у вигляді одно- або двоцифрового числа (наприклад, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 99). Однозначно не критично, що вираз буде фільтруватися лише для чисел, оскільки я ніколи не очікував би побачити будь-який інший тип даних, окрім цього, що йде в цю сферу.
Відповіді:
1 для відповіді № 1Для відповідності будь-якому числу (цілому), окрім 8 і 12, можливий шаблон:
[02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?
(Зауважте, що це не найкоротше, але альтернативи сортуються за ймовірністю.)
Але якщо ви використовуєте цей візерунок один із рядком, який містить 12, він матиме успіх, узгоджуючи лише 1 (або 2). Щоб вирішити проблему, ваш шаблон повинен бути прикріплений.
Якорі
Дві можливості:
1) Ви перевіряєте, чи є цілий рядок числом:
У цьому випадку ви можете завершити свій вираз, використовуючи початок і кінець рядкових якорів:
^([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)$
2) Ви тестуєте, чи рядок містить число:
Здебільшого інші двигуни з регулярними виразами використовують межу слів b
робити це, але відповідно до цей документ, здається, що ця функція недоступна. Отже, вирішення полягає в описі всіх можливих сценаріїв зліва та праворуч від шаблону:
([^0-9]|^)([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)([^0-9]|$)
де [^0-9]|^
означає символ, який не є цифрою або початком рядка. (те саме для кінця)
2 для відповіді № 2
Давайте подивимося, що ви намагаєтеся зробити за допомогою регулярного виразу [^((12)|8)]
. Ось ви заявили всередину клас персонажа матч нічого, крім (
)
|
1
2
8
. Тож кожен екземпляр цих символів буде відкинутий.
Щоб не відповідати 12
і 8
вам доведеться вказати, що ви хочете відповідати.
Регулярні висвітлення: b([02-9][0-9]|[0-9][013-9]|[0-79])b
Пояснення:
b
з обох сторін встановіть межу слова, щоб відповідати лише числам.[02-9][0-9]
відповідає всім числам, крім1
передує2
тобто12
.[0-9][013-9]
відповідає всім числам, крім2
досягла успіху1
тобто12
[0-79]
відповідає всім числам, крім8
.|
зміна, яка використовується для узгодження будь-якого з випадків.