/ /. *? не съответства на знака преди границата на думата - c #, regex, .net-4.5

. *? не съответства на знака преди границата на думата - c #, regex, .net-4.5

Трудно ми е да разбера защо ((?i)bb.*?b) се завръща b и не b- за низ a b- c, Аз също се опитах ((?i)bbw*b), но това не работи по-добре.

Някои повече информация:

Трябва да съвпадна с думи в текст. Трябва да извлека всички думи, които започват с писмото b, И "думи" означава почти всеки низ от знаци, който започва с a b, като b, b-, b", b" и т.н. "Думите", които трябва да съответствам, не са, разбира се, ограничени с пространство, каквото е в примера.

Отговори:

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

Това трябва да ви даде желания резултат:

(b.*?)(?:s|$)

Проверих го a b- c bfdf b32=" dfa b. b---s asd b.

Изглежда, че не търсиш думи но всеки низ, започващ с буквата "b", определен от пространство (или друг?) знак (и). Вашият оригинален модел не може да работи, защото "-" не се квалифицира като част от дума. Късмет.

Забележка: Над модела е много проста, последната част с $ е там, че последното "b" е заловен, който е в края на линията.


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

* се нарича "алчен" квантор, Тя ще съответства на колкото се може повече повторения от предходния модел е възможно.Повечето, това е точно това, което искате, но понякога искате да използвате "мързелив" quantifier, което означава, че ще " малцина колкото е възможно, включително 0.

За да направите количественото число "мързеливо", добавете въпросителен знак: *?, +?, ??и др.

Сега следващата част от отговора е как границите на думите работа. Границите на думата ще съответстват на a позиция където има "прекъсване" между "думи" (0-9, a-z и _) и "non-word characters". - е не-дума характер, така че позициите между b-, -c и c всички ще работят.

Защото имаш мързелив количествен израз и има граница на думите непосредствено след b, това е всичко, което вашият регекс ще съвпадне.

Вместо да се опитвате да използвате границата на думите, за да намерите края на думата си, просто съвпадайте със символи на думи и тирета, както е така, което естествено ще съвпада с всичко "края" на думата:

bb[-w]*

Вижте a работен пример


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

.*? е минимално, така че b.*?b намира първата граница на думата след b, От b е дума, и - не е, че границата на първата дума е между тези знаци.

ЕТА: Нещо е, че не смятате, че вашите "думи" са думи, така че b няма да работи за тях. Казвате, че вашите "думи" не винаги завършват с пространство. И очевидно няма да свършат с тире. Как, по-точно, те свършват?