Это простой вопрос о регулярных выражениях, но я не нахожу ответа.
Я хочу определить, появляется ли число последовательно два или четыре раза. Какой синтаксис я могу использовать?
\d{what goes here?}
Я пробовал \d{2,4}
, но это выражение тоже принимает три цифры.
abc 123 xyz
? Должен ли он совпадать,12
потому что это ровно две цифры подряд? Или нет, потому что12
это часть более крупной последовательности цифр,123
которая сама по себе не имеет длины ни 2, ни 4? Если бы мне пришлось угадывать, я бы подумал, что вы хотите последнее поведение, но это не ясно из вашего вопроса. Примеры и / или более четкое описание могут помочь. Тот же вопрос дляabc 12345 def
... что там должно происходить?Ответы:
Для этого нет специального синтаксиса, но есть много способов сделать это:
(?:\d{4}|\d{2}) <-- alternation: four digits or two \d{2}(?:\d{2})? <-- two digits, and optionally two more (?:\d{2}){1,2} <-- two digits, times one or two
источник
\d{2}(?:\d{2})?
решении сразу же - хорошее их разнообразие - последнее, в частности, казалось очень красивым и масштабируемым.(?:
запускает «группу без захвата» (группу, на которую не следует ссылаться в операторе замены). Вы также можете просто использовать скобки, но это создаст группу захвата. Более подробная информация здесь: stackoverflow.com/questions/3512471/non-capturing-group"333"
. Возможно, вы по ошибке используете функцию «найти соответствующую подстроку» в своей библиотеке регулярных выражений, а не ее функцию «проверка совпадения полной строки». Вам следует ознакомиться с его документацией.(?<!\d)(\d{2}|\d{4})(?!\d)
Это правильный способ сделать это. Принятый ответ неверен.
Он будет соответствовать 3 цифрам (или 5). Так что это неправильно в моих глазах .
1) Убедитесь, что перед последовательностью из 2 или 4 цифр, а также после последовательности из двух или четырех цифр нет цифр.
(<!)
синтаксис - отрицательный взгляд назад(?!)
синтаксис - отрицательный взгляд вперед.Вышеупомянутое будет работать для средней строки:
Если строка поиска не имеет никакого содержания вокруг него вы могли бы использовать
^
и$
начала и конца строки якорей:^\d{4}$|^\d{2}$
источник
(?<!\d)(\d{2}|\d{4})(?!\d)
^\d{4}$|^\d{2}$
было бы потенциальным способом исправить это. Как бы^\d{2}(?!\d)|^\d{4}(?!\d)