Совпадение первого слова фразы в строке

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

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

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

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

Lorem BIFF BAM BOO Ипсем

а также

Lorem BEEP BAM BOO Ипсем

Я бы посмотрел, чтобы соответствовать (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 ответа

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

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

Другие вопросы по тегам