Например, разгледайте следните изрази:
no_space = "This is a test".match(/(w+)(w+)/)
with_space = "This is a test".match(/(w+) (w+)/)
Изразът no_space
сега е обектът на мандата #<MatchData "This" 1:"Thi" 2:"s">
, докато with_space
е #<MatchData "This is" 1:"This" 2:"is">
, Какво става тук? Струва ми се, че буквалното пространство между символите показва на рубин, че трябва да съвпада с няколко думи, ако е възможно, без да има място, което да доведе до ограничаване на мача до една дума. Всяко обяснение или изясняване по този въпрос ще бъде оценено.
Благодаря.
Отговори:
1 за отговор № 1w
не съвпада с пространството и +
е алчен, освен ако не го следвате ?
, така че Руби се опитва да събере колкото се може повече w
колкото е възможно, докато останалата част от експреса също съвпада, ефективно консумирана Thi
при първото улавяне и s
във втория.
Когато добавите интервал, Ruby съответства на много w
до космическия символ, а след това колкото се може повече w
, следователно съвпадение This
и is
.
Моля, уведомете ме, ако това не е ясно.
0 за отговор № 2
С регулярния израз /(w+)(w+)/
, единствените знаци, които могат да бъдат съчетани сасимволи на думи (букви, цифри и долни черти). Един регулярен израз ще съвпадне само с последователни символи в низ, така че ако не включите нещо в регулярния израз, за да съответства на интервалите между думите, регексът няма да съответства повече от една дума.