Регулярка, объясните

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
ку
дано

C#:
"status":"SUCCESS","pricing":{"nrw":{"registration":"35.04","renewal":"35.58","transfer":"35.58"
надо взять только - nrw

делаю так
C#:
(?<=").*?(?=":\{"registration)
берет так
C#:
status":"SUCCESS","pricing":{"nrw
почему?

по идее же (?<=").*?(?=":\{"registration)
знак вопроса и говорит что надо брать самое короткое совпадение между " и ":{"registration
а самое короткое и есть то что мне надо

где косяк?

79755
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 449
Благодарностей
5 476
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Да. Тоже заметил такую "особенность регулярок".
Место *? можно указать .{1,5} например
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 652
Баллы
113
если бы регулярки искали все возможные вхождения, а потом среди них выбирало кратчайшее, представляешь насколько бы выросла нагрузка?

регулярка ищет первое удовлетворяющее условие и уже там пытается сократить результат. Она не будет искать новое значение и сравнивать их длины
 
  • Спасибо
Реакции: backoff и Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 449
Благодарностей
5 476
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

если бы регулярки искали все возможные вхождения, а потом среди них выбирало кратчайшее, представляешь насколько бы выросла нагрузка?

регулярка ищет первое удовлетворяющее условие и уже там пытается сократить результат. Она не будет искать новое значение и сравнивать их длины
А самой регуляркой можно поставить условие для сокращения? (помимо моего варианта)
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
если бы регулярки искали все возможные вхождения, а потом среди них выбирало кратчайшее, представляешь насколько бы выросла нагрузка?

регулярка ищет первое удовлетворяющее условие и уже там пытается сократить результат. Она не будет искать новое значение и сравнивать их длины
логично
 

one

Client
Регистрация
22.09.2015
Сообщения
6 976
Благодарностей
1 303
Баллы
113

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 449
Благодарностей
5 476
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

porileenvej

Client
Регистрация
09.05.2020
Сообщения
99
Благодарностей
133
Баллы
33
знак вопроса и говорит что надо брать самое короткое совпадение между " и ":{"registration
Искать самое короткое совпадение между первых встреченных ", и до ":\{"registration

Используй такую регулярку, будет то что нужно
Код:
(?<=")[^"]*?(?=":\{"registration)
 
  • Спасибо
Реакции: Mikhail B. и backoff

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 652
Баллы
113
Искать самое короткое совпадение между первых встреченных ", и до ":\{"registration

Используй такую регулярку, будет то что нужно
Код:
(?<=")[^"]*?(?=":\{"registration)
знак вопроса лишний
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113

porileenvej

Client
Регистрация
09.05.2020
Сообщения
99
Благодарностей
133
Баллы
33
Код:
(?<=")[^"]*?(?=":\{"registration)
(?<=") - искать любые символы после "
[^"] - кроме "
* - символов может быть 0 или больше (можно использовать + символов может быть 1 или больше)
? - самое короткое совпадение (не обязателен в данной регулярке)
(?=":\{"registration) - конец поиска
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
Снова прошу разъяснить, чето не получается

есть строка
C#:
C:\ZennoPoster\projects\Yandex\YandexReger2\data\profiles\elkngdfjg.zpprofile
нужно получить - elkngdfjg

делаю так
C#:
(?<=\\)[^\\].*?(?=\.zpprofile)
получаю
C#:
ZennoPoster\projects\Yandex\YandexReger2\data\profiles\elkngdfjg
пробовал так
81720
получаю либо тоже самое либо ошибку по синтаксису (потому что надо закрывать \\)

как выделить?
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
746
Баллы
113

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
не, тут весь прикол, использовать только "\"
с дополнительными параметрами легко сделать
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
746
Баллы
113

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
746
Баллы
113

Reysh

Client
Регистрация
02.12.2018
Сообщения
197
Благодарностей
136
Баллы
43

volody00

Client
Регистрация
06.09.2016
Сообщения
991
Благодарностей
1 108
Баллы
93

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113

volody00

Client
Регистрация
06.09.2016
Сообщения
991
Благодарностей
1 108
Баллы
93

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 478
Благодарностей
10 023
Баллы
113
  • Спасибо
Реакции: backoff

heks

Client
Регистрация
01.10.2013
Сообщения
1 578
Благодарностей
484
Баллы
83
давно это заметил не вариант как то сделать что бы самое короткое выражение работало по принципу.
ищем на то что заканчивается выражение и берет первое попавчееся выражение слевой стороны. вообще не удобно сделано
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
ну это вопрос не к разрабам зенки, а к разрабам регулярок как мне кажется
зенка просто работает по "законам" регулярок без какой-то самодеятельности, что в целом и правильно
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 478
Благодарностей
10 023
Баллы
113
давно это заметил не вариант как то сделать что бы самое короткое выражение работало по принципу.
ищем на то что заканчивается выражение и берет первое попавчееся выражение слевой стороны. вообще не удобно сделано
ну это вопрос не к разрабам зенки, а к разрабам регулярок как мне кажется
зенка просто работает по "законам" регулярок без какой-то самодеятельности, что в целом и правильно
Направление поиска можно поменять как здесь описано:

C#:
string pattern = @"(?<=\\).*?(?=\.zpprofile)";
//Regex reg = new Regex(pattern);
Regex reg = new Regex(pattern, RegexOptions.RightToLeft);
string instring = @"C:\ZennoPoster\projects\Yandex\YandexReger2\data\profiles\elkngdfjg.zpprofile";
project.Variables["testregex"].Value = reg.Match(instring).Value;
81804
 
Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
6 294
Благодарностей
6 596
Баллы
113
  • Спасибо
Реакции: Sergodjan

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