/ / 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}.

(Примітка: Я думаю, що . в .? мав на увазі бути буквальною крапкою, а значить, слід уникати її, тобто .?; крапка в регулярному виразі означає "будь-який символ", крім класу символів.)

Щодо самого регулярного вираження:

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.

редагувати: регулярний виправлення, виправлений з урахуванням коментаря @AlanMoore, буде:

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

Можливо, цей регекс теж повинен бути закріплений ... Але це лише здогадки.