2010-08-03 11 views
0

Je voudrais être en mesure d'extraire un nombre à partir d'une chaîne formatée comme suit:Expression régulière pour extraire un numéro

« < [1085674730]> bonjour foo1, comment allez-vous? » Je suis un novice avec des expressions régulières, je veux seulement pouvoir extraire un nombre qui est inclus dans le plus grand/moins-que et les symboles de parenthèse, mais je ne suis pas sûr de savoir comment s'y prendre. Je dois faire correspondre les chiffres numériques seulement, mais je ne suis pas sûr de la syntaxe utilisée pour rechercher uniquement dans ces symboles.

MISE À JOUR:

Merci à tous pour vos commentaires, désolé de ne pas être plus précis, comme je l'ai expliqué kiamlaluno, j'utilise VB.Net comme langue pour mon application. Je me demandais pourquoi certaines implémentations ne fonctionnaient pas. En fait, le seul qui ait fonctionné était celui décrit par Matthew Flaschen. Mais cela capture les symboles autour du nombre ainsi que le nombre lui-même. Je voudrais seulement capturer le nombre qui est enfermé dans les symboles et filtrer les symboles eux-mêmes.

+0

Étant donné que différents langages de programmation ont différentes implémentations d'expressions régulières, la réponse dépend du langage de programmation que vous utilisez; Je ne pense pas que vous soyez intéressé de savoir comment chaque langage de programmation implémente des expressions régulières. – kiamlaluno

+0

Oui kiamlaluno, désolé j'ai oublié d'ajouter ces détails, j'utilise VB.Net comme langue de ma mise en œuvre. Jusqu'à présent, seule la solution de Matthew Flaschen fonctionne, le problème est qu'il capture le plus grand/moins-que et les symboles de parenthèse avec le nombre, je veux seulement le nombre. – kingrichard2005

+0

à l'avenir, vous devez savoir que chaque .NET ['Match'] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.aspx) a un [' Groups' ] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups.aspx) propriété. Pour mon regex, vous auriez accès '.Groups [1]'. C'est souvent plus simple que d'utiliser lookaround. –

Répondre

0

Combiner le poteau Mathews avec des similitudes http://www.regular-expressions.info/lookaround.html. Cela exclura le préfixe et le suffixe. Je n'ai pas testé cette regex mais elle devrait être très proche de ce dont vous avez besoin. Vérifiez à nouveau le lien fourni.

Espérons que cela aide!

4

Utilisation:

<\[(\d+)\]> 

Ceci est testé avec ECMAScript regex.

Cela signifie:

  • \[ - littéral [
  • ( - groupe capture ouvert
  • \d - chiffres
  • + - un ou plusieurs
  • ) - groupe de capture à proximité
  • \] - littéral ]

La fonctionnalité globale consiste à capturer un ou plusieurs chiffres entourés par les caractères donnés.

+0

J'ai compris, merci pour l'explication. Y a-t-il de bonnes ressources de tutoriel que vous recommanderiez pour apprendre RegEx? – kingrichard2005

+2

[regular-expressions.info] (http://www.regular-expressions.info/) est approfondie. –

+1

Pas clair d'OP, mais si vous savez que la ligne commence par le '<...>' vous pouvez être plus sûr en utilisant '^ <\[(\d+)\]>' pour vous assurer que la chaîne est au début de la ligne et non au milieu comme une citation d'un ligne précédente ou une telle. –

0

Utilisation:

/<\[([[:digit:]]+)\]>/ 

Si votre implémentation ne supporte pas la syntaxe [:digit:] à portée de main, utilisez ceci:

/<\[([\d]+)\]>/ 

Et si votre implémentation ne supporte pas la syntaxe \d à portée de main, puis utiliser ceci:

/<\[([0-9]+)\]>/ 
+1

Vos deux derniers sont déséquilibrés. –

+0

@Matthew Flaschen, merci! Perl ne s'est pas plaint, et je n'ai pas remarqué. Oops. – sarnold

0
$subject = "<[1085674730]> hello foo1, how are you doing?"; 
preg_match('/<\[(\d+)\]>/', $subject, $matches); 

$matches[1] contiendra le numéro que vous recherchez.

Questions connexes