/ / Regex c #, включващ цифри и интервали - c #, .net, regex

Regex c # с цифри и интервали - c #, .net, regex

Какво правят следните Regex?

    d{1,3}.?d{0,3}s[0-9a-zA-Z. -]{4,40}

Разбирам, че d е за цифра, но какво прави 1,3.

Ако някой може да обясни по-нататък, че ще бъде оценено

Отговори:

2 за отговор № 1

{n,m} е квантор, който означава "поне n пъти, най-много m пъти". Подобно на всички квантори, по подразбиране е алчен, а за диалектите, които ги поддържат, има и мързеливи и притежателни версии{n,m}? и {n,m}+ съответно - .NET поддържа първия, но не и последния, за съжаление).

ако n не е посочен, той е 0; ако m не е посочена, тя е безкрайност.

Това означава, че можете да пренапишете класическата *, + и ? използвайки този квантор:

  • * е {0,};
  • + е {1,};
  • ? е {0,1}.

(Забележка: Мисля, че . в .? трябваше да бъде буквална точка, което означава, че трябва да се избягва, т.е. .?; точката в regex означава "всеки знак", с изключение на клас символи.)

Що се отнася до самия режекс:

d{1,3}        # match a digit, one to three times, followed by
.?             # any character, 0 or one time (see my remark), followed by
d{0,3}        # a digit, zero to three times, followed by
s             # a space character, followed by
[0-9a-zA-Z. -] # a digit, or any letter, or a dot, or a space, or a hyphen,
{4,40}         # 4 to 40 times

И накрая, трябва да се отбележи, че d в .NET езиците не се ограничава до 0-9, тя може да съвпада с други Unicode цифри.

edit: фиксираният regex, като се има предвид коментарът на @AlanMoore, ще бъде:

d{1,3}(.d{1,3})?s[0-9a-zA-Z. -]{4,40}

Може би и този regex трябва да бъде закотвен, но ... Но това е само предположение.