Совпадение первого слова фразы в строке
Я использую класс 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)"
,