Совпадение первого слова фразы в строке - PullRequest
0 голосов
/ 19 января 2010

Я использую класс GTMRegex из набора инструментов Google для Mac (в приложении Какао / Objective-C):

http://code.google.com/p/google-toolbox-for-mac/

Мне нужно сопоставить и заменить фразу из 3 слов в строке. Я знаю 2-е и 3-е слова фразы, но первое слово неизвестно.

Итак, если бы у меня было:

Lorem BIFF BAM BOO ipsem

и

Lorem BEEP BAM BOO ipsem

Я бы смотрел, чтобы они совпадали (BEEP BAM BOO) и (BIFF BAM BOO). Затем я хочу обернуть их в смелые теги HTML.

Вот что у меня есть:

GTMRegex *requiredHeroRegex = [GTMRegex regexWithPattern:@"(\\([A-Z][A-Z0-9]*)\\b Hero Required)" options:kGTMRegexOptionSupressNewlineSupport|kGTMRegexOptionIgnoreCase];
out = [requiredHeroRegex stringByReplacingMatchesInString:out withReplacement:@"<b>\\1</b>"];

Однако это не работает. по сути, я не могу понять, как сопоставить первое слово, когда я его не знаю.

Кто-нибудь знает RegEx, чтобы сделать это?

Обновление:

GTRegEx использует регулярные выражения POSIX 1003.2, поэтому решение:

GTMRegex *requiredHeroRegex = [GTMRegex regexWithPattern:@"([[:<:]][A-Z][A-Z0-9]*[[:>:]])( Hero Required)" options:kGTMRegexOptionSupressNewlineSupport|kGTMRegexOptionIgnoreCase];
out = [requiredHeroRegex stringByReplacingMatchesInString:out withReplacement:@"<b>\\1\\2</b>"];

Обратите внимание на сумасшедший синтаксис границ слова.

Обновление 2: вот версия JavaScript:

/(([A-Za-z]*?|[A-Za-z]*? [A-Za-z]*?)( Hero Required))/gm

Ответы [ 2 ]

1 голос
/ 19 января 2010

Заменить \b([a-z][a-z0-9]*)( second third) на <b>\1</b>\2

1 голос
/ 19 января 2010

Вы должны использовать " .*? Hero Required", однако, он не будет ловить фразу, если это начало предложения.Для обоих случаев используйте "( .*? Hero Required|^.*? Hero Required)".

...