Трудно ми е да разбера защо ((?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
няма да работи за тях. Казвате, че вашите "думи" не винаги завършват с пространство. И очевидно няма да свършат с тире. Как, по-точно, те свършват?