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
nongreedy regex. –
Malheureusement, aucun d'entre eux ne correspond à rien. – mikechambers
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