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