2010-01-19 6 views
0

J'utilise la classe GTMRegex de la boîte à outils Google pour Mac (dans un cacao/Objective-C) application:match premier mot d'une phrase dans une chaîne

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

que je dois faire un match et remplacez une phrase de 3 mots dans une chaîne. Je connais les 2ème et 3ème mots de la phrase, mais le premier mot est inconnu.

Donc, si je devais:

lorem BIFF BAM BOO ipsem

et

lorem BEEP BAM BOO ipsem

Je regardais faire correspondre les deux (BEEP BAM BOO) et (BIFF BAM BOO). Je veux ensuite les envelopper dans des balises HTML en gras.

Voici ce que j'ai:

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

Toutefois, cela ne fonctionne pas. fondamentalement, je ne peux pas comprendre comment faire correspondre le premier mot quand je ne le sais pas.

Quelqu'un connaît le RegEx pour ce faire?

Mise à jour:

GTRegEx utilise POSIX 1003.2 des expressions régulières, donc la solution est:

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

Notez la syntaxe fou pour les limites de mots.

Mise à jour 2: Voici la version JavaScript:

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

Répondre

1

Vous devez utiliser " .*? Hero Required", cependant, il ne sera pas Accroche si elle est le début de la phrase. Pour les deux cas, utilisez "(.*? Hero Required|^.*? Hero Required)".

+0

nongreedy regex. –

+0

Malheureusement, aucun d'entre eux ne correspond à rien. – mikechambers

+0

je l'ai vérifié avec regexbuddy, donc je suppose que le problème est dans le code, pas la partie regex, et je ne sais pas le cacao ... – Amirshk

1

Remplacer \b([a-z][a-z0-9]*)(second third) avec <b>\1</b>\2

+0

Cela ne correspond à rien. – mikechambers

Questions connexes