#re&ex #post&resql
#регулярное выражение #post&resql
Вопрос:
Мне нужно выбрать строки из post&res, где номер детали имеет трехзначное число (300-399) в начале. Мне просто нужно совпадение / нет совпадения.
В основном я там с:
WHERE name ~ '^[A-Z]{0,5}3[0-9]{2}[^0-9]?*'
Номера деталей
- может содержать всего 3 цифры,
- может содержать до 5 символов перед числом
- может содержать символы после числа
- должно исключать 4-значные числа
Они должны совпадать:
- 323
- A335
- AB359-B2
- BB311BB
Они не должны совпадать:
- 3234
- A3357
- AB3590-B
С учетом вышесказанного, передается ‘должно совпадать’, но также передаются ‘не должно совпадать’. Кажется, вопросительный знак, который проверяет наличие нецифрового ([^0-9]?), пропускает цифры, но я не могу сделать это обязательным, поскольку простой трехзначный номер детали не будет соответствовать.
Спасибо!
Комментарии:
1.
?
делает ваше нецифровое выражение необязательным. Так что да.
Ответ №1:
Это регулярное выражение проходит все ваши тесты.
'^[^d]{0,5}d{1,3}(y|[^d])'
Первый курсор ^
привязывается к началу.
[^d]{0,5}
Допускает до пяти нецифровых символов.
d{1,3}
Допускается от одного до трех символов каждой цифры.
(y|[^d])
Чередование соответствует либо нецифровому символу, либо границе слова, такой как конец строки.
Ответ №2:
Шаблон, который вы пробовали, возможно, также мог бы соответствовать первым 3 цифрам в строке с 4 цифрами, поскольку символьный класс в конце необязателен [^0-9]?
Если вы не сделаете его необязательным [^0-9]
, оно не будет соответствовать только a 323
, поскольку после него ожидается символ, который является любым символом, кроме цифры.
Если после числа могут быть символы, но не цифра, вы можете использовать отрицательный прогноз (?!d)
, чтобы утверждать, что справа нет цифры.
^[A-Z]{0,5}3[0-9]{2}(?!d)
Объяснение
^
Начало строки[A-Z]{0,5}
Совпадение 0-5 раз с символом от А доЯ3[0-9]{2}
Совпадение3
и 2 цифры(?!d)
Отрицательный прогноз, утверждение, что то, что находится справа, не является цифрой
Демонстрация регулярного выражения | Демонстрация Post&resql