Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
 regex. Последовательность цифр не с нуля  [new]
Dmitri Krizhanovski
Member

Откуда:
Сообщений: 502
Привет!

Помогите составить регулярное выражение, с помощью котрого можно получить первую последовательность цифр, которая не начинается с нуля.

Для строки "It's my Life;012354687 ;91271-1; 5487" нужно получить "91271".

У меня пока что используется "[1-9]\d+" - и здесь я получаю "12354687", т.е. часть последовательности цифр, которая начинается с нуля в исходной строке.
18 окт 19, 10:50    [21997185]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Владимир П.
Member

Откуда: Екатеринбург
Сообщений: 441
(?<!\d)[1-9]\d+
18 окт 19, 11:40    [21997258]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Владимир П.
Member

Откуда: Екатеринбург
Сообщений: 441
Нет, так последовательность из одной цифры не попадёт в выборку. Правильнее так:

((?<!\d)[1-9]\d+)|[1-9]
18 окт 19, 11:43    [21997263]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Dmitri Krizhanovski
Member

Откуда:
Сообщений: 502
Владимир П.,

Спасибо.
Только где это работает? На трех сайтах это выражение ((?<!\d)[1-9]\d+)|[1-9] все равно выделяет каждую цифру в исходной строке.

К сообщению приложен файл. Размер - 54Kb
18 окт 19, 12:02    [21997287]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20762
(^|[^\d])([1-9]\d*)($|[^\d])
fiddle
18 окт 19, 13:08    [21997361]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Dmitri Krizhanovski
Member

Откуда:
Сообщений: 502
Akina,

Спасибо!

Но здесь fiddle выделяет по одному символу слева и справа от найденого.
18 окт 19, 13:46    [21997412]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20762
Dmitri Krizhanovski, а посмотреть? в шаблоне определено ТРИ группы - вот они все три и подсвечиваются. тебе нужна только вторая группа.
18 окт 19, 15:04    [21997501]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
fkthat
Member

Откуда:
Сообщений: 3778
Akina,

Третья группа там, кажись, избыточная - оператор "*" в регекспе жаден по умолчанию.
18 окт 19, 15:16    [21997514]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1350
Dmitri Krizhanovski
Для строки "It's my Life;012354687 ;91271-1; 5487" нужно получить "91271".

если там всегда нужна цифра между второй и третьей ";", то проще через ";" сделать
18 окт 19, 18:09    [21997675]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
alekcvp
Member

Откуда:
Сообщений: 2454
Dmitri Krizhanovski
Для строки "It's my Life;012354687 ;91271-1; 5487" нужно получить "91271".

Там перед числом всегда идёт ';'? Если да, то: ;[\D]*(?<!0)([1-9]\d+) ]\D] пропускает символы от ';' до первой цифры.
19 окт 19, 11:55    [21997915]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
alekcvp
Member

Откуда:
Сообщений: 2454
alekcvp,

Ошибся немного:
alekcvp
;[\D]*((?<!0)[1-9]\d*)
19 окт 19, 11:58    [21997918]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
alekcvp
Member

Откуда:
Сообщений: 2454
Если ';' в начале не обязательна, то:
\D(?<!0)([1-9]\d*)
19 окт 19, 12:01    [21997920]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
alekcvp
Member

Откуда:
Сообщений: 2454
alekcvp,

Я даже туплю немного с утра :)

\D([1-9]\d*)

Картинка с другого сайта.
19 окт 19, 14:41    [21997953]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13446
Dmitri Krizhanovski
Для строки "It's my Life;012354687 ;91271-1; 5487" нужно получить "91271".

На JavaScript сделал бы так

var str="It's my Life;012354687 ;91271-1; 5487";
alert(str.match(/(^|[^\d])([1-9]\d*)/)[2]);
22 окт 19, 08:48    [21999465]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
mayton
Member

Откуда: loopback
Сообщений: 49732
Несколько топиков назад у меня была обратная идея. Генерировать все последовательности по регулярке.
22 окт 19, 10:20    [21999546]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
volodin661
Member

Откуда: Внутренняя Монголия
Сообщений: 505
Владимир П. всё написал сразу. только надо * вместо +

(?<!\d)[1-9]\d*
18 дек 19, 23:04    [22043712]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Имя пользователя1
Member

Откуда:
Сообщений: 721
mayton
Несколько топиков назад у меня была обратная идея. Генерировать все последовательности по регулярке.
как это все?
\d* - тут их бесконечно много
ну и конечно регулярки с несколькими lookahead ушатают твой алгоритм
19 дек 19, 22:43    [22044741]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
mayton
Member

Откуда: loopback
Сообщений: 49732
Не совсем регулярка.
Мне нужна была генерилка паролей по шаблону.
А там есть лимит на длину.
19 дек 19, 23:02    [22044747]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13446
Что делает эта "конструкция"?
(?<!)

Знаю только такую
(?!)
24 дек 19, 07:53    [22047479]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1350
чтобы исключить слово надо писать: (?<!слово). несколько слов так и пишутся: (?<!слово)(?<!слово)(?<!слово)
(?<=...) может совпасть слева; (?<!...) не может совпасть слева; (?=...) может совпасть справа; (?!...) не может совпасть справа
+
также имеется опережающая проверка: (?=\d и (?<=\d первая означает, что совпадение считается в тех позициях, за которыми следует цифра т.е. в позициях ДО цифры, а вторая = обратная (ретроспективная) и работает в позициях ПОСЛЕ цифры, т.е там, где текст начинается с цифры, например: (?=Jeffrey)Jeff ищет Jeff, но найдёт только в том случае, если Jeff будет после этой позиции (поидее она и Gord найдёт также?)
фактически в предложении by Jeffrey Gordon оно найдёт позицию, с которой начинается совпадение (начало перед J в слове Jeffrey), а не весь текст (Jeffrey), и вот отсюда уже будет искать слово Jeff. при этом должно быть именно полностью слово Jeffrey, а не Jeff или Jefferson

если слово Jeffrey найдено, то оно ПЕРЕД ним встанет в позицию и начнёт искать оттуда слово Jeff
а ретроспективная будет искать с позиции ПОСЛЕ слова Jeffrey (конкретно после y??)
при этом Jeff(?=rey) будет тоже самое, что и (?=Jeffrey)Jeff. поскольку найдёт оно Jeff, сразу за которым следует rey.
т.е. эта конструкция (?=) подразумевает расположение текста вокруг неё, но отмеряет поиск этого текста от позиции, которая определяется (?= или (?<=
звучит оно так: (?<=\bJeff)(?=s\b) # найти позицию, перед которой находится текст Jeff, а после находится s
24 дек 19, 13:58    [22047741]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
Имя пользователя1
Member

Откуда:
Сообщений: 721
krvsa
Что делает эта "конструкция"?
(?<!)
https://learn.javascript.ru/regexp-lookahead-lookbehind#retrospektivnaya-proverka
26 дек 19, 17:04    [22049513]     Ответить | Цитировать Сообщить модератору
 Re: regex. Последовательность цифр не с нуля  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13446
Ясно, спасибо.
10 янв 20, 10:47    [22056211]     Ответить | Цитировать Сообщить модератору
Все форумы / Программирование Ответить