Obtenez de Chaîne Entre les Deux Autres Cordes ObjC
Je suis en train d'analyser une chaîne et d'obtenir une autre chaîne de caractères dans le milieu.
ie.
Bonjour tout le monde ceci est une chaîne
J'ai besoin de trouver la chaîne entre le "monde" et "est" (ce). J'ai regardé autour, mais n'ont pas été en mesure de le comprendre encore, principalement parce que je suis nouveau à l'Objectif C... quelqu'un a une idée de comment faire cela, avec la RegEx ou sans?
OriginalL'auteur Andrew M | 2010-10-23
Vous devez vous connecter pour publier un commentaire.
Les expressions régulières solution que Jacques donne des œuvres, et l'inconvénient de nécessiter iOS 4.0 et plus tard est vrai. En utilisant des expressions régulières est également très lent, et trop si les expressions de recherche sont connus constantes de chaîne.
Vous pouvez résoudre le problème en utilisant des méthodes sur
NSString
, ou une classe nomméeNSScanner
, les deux ont été disponibles depuis l'iPhone OS 2.0 et longtemps avant que, depuis avant Mac OS X 10.0 effectivement :).Donc ce que vous voulez, c'est une nouvelle méthode de
NSString
comme ça?Pas un problème, et nous supposons que nous devrions revenir
nil
est pas de ces chaînes peut être trouvé.La mise en œuvre à l'aide de
NSString
seulement est assez simple:Ou vous pourriez faire de la mise en œuvre à l'aide de la
NSScanner
classe:Merci! Moi aussi je suis allez avoir à rechercher des chaînes qui se produisent plusieurs fois... ie. <balise>Bonjour</balise><balise>Bye</balise> je suppose que je pourrais juste ajouter un autre paramètre (occurrence) et ensuite faire une boucle par le départ de la chaîne de X fois, non? Je devrais être en mesure de le comprendre, surtout depuis que vous m'avez donné le point de départ de NSRange, etc. Merci encore!
Oui, aucun problème. Suffit d'utiliser les plages de la recherche précédente de limiter l'étendue de la recherche de la prochaine recherche.
OriginalL'auteur
Juste une simple modification PeyloW réponse, qui renvoie toutes les chaînes dans le début et la fin de cordes:
Pour les autres.. Ajouter un paramètre plus comme "originalString" et de la remplacer 'auto'.
OriginalL'auteur
Voir le ICU guide de l'utilisateur sur les expressions régulières.
Si vous le savez, il y a juste un résultat:
\B fait sûr qu'il y a une limite de mot avant et après est (donc "bonjour tout le monde, ce n'est pas une chaîne" ne correspondent pas). Le \s gobe n'importe quel espace après et avant. L' .+? trouve ce que vous cherchez, avec les ? le rendant non-gourmand, de sorte que "bonjour tout le monde ceci est une chaîne " bonjour tout le monde ceci est une chaîne" ne vous donne pas "cette chaîne hello world".
Je vais laisser à vous de trouver comment gérer plusieurs matchs. Le NSRegularExpression documentation devrait vous aider.
Si vous voulez assurez-vous que le match ne franchit pas les limites de la phrase, vous pourriez faire ([^.]+?) au lieu de (.+?), ou vous pourriez utiliser enumerateSubstringsInRange:options:usingBlock: sur votre chaîne et à transmettre NSStringEnumerationBySentences dans les options.
Ce genre de choses tous les besoins 4.0+. Si vous voulez soutenir 3.0+, regarder dans RegexKitLite.
OriginalL'auteur
Si elle arrive à être juste chaînes de caractères séparés par des espaces blancs, vous pouvez utiliser le code suivant: Soit
OU
OriginalL'auteur