Я использую класс 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