Що робить наступний 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}
Можливо, цей регекс теж повинен бути закріплений ... Але це лише здогадки.