2009-08-01 10 views
0

Voici la chaîne de démonstration:Comment extraire la valeur entre deux chaînes en utilisant regex?

beforeValueAfter

Supposons que je connais la valeur que je veux est entre « avant » et « après » Je veux extact la « valeur » en utilisant l'expression rationnelle ....

pervious909078375639355544after

Assum e que je sais que la valeur que je veux est entre "pervious90907" et "55544after" Je veux supprimer le "83756393" en utilisant la regex ....

thx à l'avance.

+0

vous pouvez juste faire une substitution de chaîne sur "pervious90907" et "55544after". vous serez laissé avec la valeur que vous voulez. pas besoin regex – ghostdog74

Répondre

2

La réponse dépend de deux choses:

  • Si vous connaissez exactement ce que la valeur se compose (si vous le connaissez sera chiffres, etc., il est plus facile). Si cela peut être quelque chose, la réponse est un peu plus difficile.
  • Si votre système est gourmand/non gourmand par défaut, cela affecte la manière dont vous avez configuré l'expression. Je vais supposer qu'il est gourmand par défaut.

Si elle peut être quelque chose (le sera nécessaire pour faire basculer le .* à ungreedy parce que « .* » correspond aussi « Après »:

/before(.*?)After/ 

Si vous le savez est chiffres:

/before(\d*)After 

Si ce pourrait être des caractères de mot (0-9, az, AZ, _):

/before(\w*?)After 
+0

respone très clair et rapide. – Tattat

+0

'\ w' contient plus de caractères que simplement' 0'-'9',' a'-'z', 'A'-' Z' et '_'. – Gumbo

+0

@Gumbo, dépend de la plate-forme que vous utilisez – Nicole

0

Essayez cette expression régulière:

pervious90907(.*?)55544after 

que vous obtiendrez la plus courte chaîne (notez le *? non gourmand quantificateurs) entre pervious90907 et 55544after.

+0

Si je veux limiter le résultat est seulement le chiffre, que puis-je faire? – Tattat

+0

Remplacez '.' par' [0-9] ', donc' [0-9] *? '. – Gumbo

+0

@Tattat: \ d Voir ma réponse pour plus d'informations. – Nicole

0

Le regex devrait ressembler à ceci:

previous([0-9]*)after 
0
 
bash-3.2$ echo pervious909078375639355544after | perl -ne 'print "$1\n" if /pervious90907(.*)55544after/' 
83756393 
Questions connexes