Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

preslavgetov avatar preslavgetov 3 Точки

Regex проблеми

Здравейте,

Решавам задачите от Lab-a за Regex във C# Fundamentals. Стигам до втората задача - Match Phone Number.

Трябва да match-нем +359 2 222 222 и +359-2-222-2222, но не и 359-2-222-2222, +359/2/222/2222, +359-2 222 2222
+359 2-222-2222, +359-2-222-222, +359-2-222-22222.

Използвайки regex101 както ни е препоръчано в лекцията пиша следния regex - \+359([\s|-])2\1[0-9]{3}\1[0-9]{4}.

Той не шваща нищо. Дебъгвам го. Нищо стойностно не произлиза от това освен, че според платформата проблема идва някъде след второто използване на backreference. Доколкото четох няма проблем да се използва backreference два пъти, така че едва ли това е проблема (уж).

Някой може ли да обясни как да се напише това. Гледах подобни теми, но повечето реджекси там нито са обяснени нито са особено четими. Имаме ли нужда освен това от \b? Предната задача пропада без това. \b междудругото се обяснява някъде за 2 минути макс в лекцията.

Благодаря предварително.

Тагове:
1
C# Fundamentals
svephoto avatar svephoto 1191 Точки

Здравей, preslavgetov,

 

Tака както си го написал и с добавяне на \b накрая работи и хваща валидните номера, не виждам проблем: \+359([\s|-])2\1[0-9]{3}\1[0-9]{4}\b. И да, имаме нужда от \b накрая, защото това определя границата на израза, т. е. докъде да свършва - валиден номер трябва да завършва точно с 4 цифри без нищо след тях. Ако няма \b изразът хваща и номер +359-2-222-22222, който завършва с 5 цифри както е пояснено и в условието: Add a word boundary at the end of the match to avoid partial matches.

1
17/04/2021 11:19:59
krum_43 avatar krum_43 750 Точки

Как ще хваща кейса +359-2-222-22222 като в регекса имаме [0-9]{4}.

Нещо се губи логиката.

0
svephoto avatar svephoto 1191 Точки

Ами тествай го, пробвай и ще видиш. Никак даже не се губи логиката - нали точно това е изрично посочено в условието: to avoid partial matches. Регексът без \b накрая хваща частта от +359-2-222-22222 до 4-тата двойка и след нея накрая остава още една двойка. Идеята е да могат да се хващат целите номера с написания регекс, а не само части от тях. Някой може да сложи още 20 символа след 4-тата четворка и това, че нашият регекс завършва на [0-9]{4} нищо не ни помага за конкретната задача.

1
krum_43 avatar krum_43 750 Точки

Да,разбрах го.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.