/ / Защо има буквално пространство между регекс-символите, което води до различни предмети на matchdata? - рубин, регекс

Защо да имаме буквално пространство между реджетните символи, което води до различни предмети на мандата? - рубин, регекс

Например, разгледайте следните изрази:

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 за отговор № 1

w не съвпада с пространството и + е алчен, освен ако не го следвате ?, така че Руби се опитва да събере колкото се може повече w колкото е възможно, докато останалата част от експреса също съвпада, ефективно консумирана Thi при първото улавяне и s във втория.

Когато добавите интервал, Ruby съответства на много w до космическия символ, а след това колкото се може повече w, следователно съвпадение This и is.

Моля, уведомете ме, ако това не е ясно.


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

С регулярния израз /(w+)(w+)/, единствените знаци, които могат да бъдат съчетани сасимволи на думи (букви, цифри и долни черти). Един регулярен израз ще съвпадне само с последователни символи в низ, така че ако не включите нещо в регулярния израз, за ​​да съответства на интервалите между думите, регексът няма да съответства повече от една дума.