Как указать в Regex что символ начала должен быть один, а не окончанием

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Всем привет. В общем возникла проблемка, с указанием в Regex что в начале должен быть конкретный символ (а точнее в моем случае цифра), а не окончанием.
Вкратце, я получаю координаты определенного цвета пикселя через Imagemagick и этот результат мне нужно выпарсить, что бы обрезать картинку.
Выдача имеет такой формат:

0,138,srgba(0,0,0,1)
0,139,srgba(0,0,0,1)
0,140,srgba(0,0,0,1)
10,140,srgba(0,0,0,1)
140,140,srgba(0,0,0,1)

К ней я применяю регулярное выражение (?<=0\,).*?(?=,srgba\(0,0,0,1\)) и получаю все координаты где есть 0 перед запятой, это и логично, ведь так написана регулярка. Что нужно поставить в регулярке для того, что бы выдавался результат там где только есть один 0, а не в составе десятков, сотен и т.д единиц.
Т.е получить в результате не все значения из примера, а только что бы под условие попадали первые 3.

Можно пойти по пути все выпарсить через мою регулярку в список и там удалить дубли, такое не подойдет, нужный мне цвет 100% находится в нулевой координате, в остальных может быть мусор.

Обрезать 1 пиксель слева и пройтись по обрезку, тоже не подойдет, все таки нужна оптимизация, чем меньше доп. действий тем лучше.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Всем привет. В общем возникла проблемка, с указанием в Regex что в начале должен быть конкретный символ (а точнее в моем случае цифра), а не окончанием.
Вкратце, я получаю координаты определенного цвета пикселя через Imagemagick и этот результат мне нужно выпарсить, что бы обрезать картинку.
Выдача имеет такой формат:

0,138,srgba(0,0,0,1)
0,139,srgba(0,0,0,1)
0,140,srgba(0,0,0,1)
10,140,srgba(0,0,0,1)
140,140,srgba(0,0,0,1)

К ней я применяю регулярное выражение (?<=0\,).*?(?=,srgba\(0,0,0,1\)) и получаю все координаты где есть 0 перед запятой, это и логично, ведь так написана регулярка. Что нужно поставить в регулярке для того, что бы выдавался результат там где только есть один 0, а не в составе десятков, сотен и т.д единиц.
Т.е получить в результате не все значения из примера, а только что бы под условие попадали первые 3.

Можно пойти по пути все выпарсить через мою регулярку в список и там удалить дубли, такое не подойдет, нужный мне цвет 100% находится в нулевой координате, в остальных может быть мусор.

Обрезать 1 пиксель слева и пройтись по обрезку, тоже не подойдет, все таки нужна оптимизация, чем меньше доп. действий тем лучше.
Update: Как всегда после написания поста вопрос решается в течении 10 минут. Нужный результат был достигнут с помощью якоря \b до и после 0. (?<=\b0\b,).*?(?=,srgba\(0,0,0,1\))
 
Последнее редактирование:

Solus

Client
Регистрация
14.04.2014
Сообщения
377
Благодарностей
119
Баллы
43
(?<=(\s+|^))0.*
 
  • Спасибо
Реакции: b1zar

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)