2012-07-02 3 views
2

J'ai besoin d'extraire une valeur d'un champ HTML caché, je l'ai un peu compris, mais je suis actuellement coincé.Comment gérer ce problème de regex?

Mon regex ressemble:

<input type="hidden" name="form_id" value=".*" 

Mais extrait la chaîne entière du HTML.

La chaîne ressemble:

<input type="hidden" name="form_id" value="123"/> 

je dois extraire la « valeur » de la chaîne, il est toujours en train de changer, mais le « nom » est toujours le même. Y a-t-il un moyen de l'extraire sans faire une autre expression? J'apprécie toute aide.

+0

S'il vous plaît définir « sans faire une autre expression ». –

+0

@humble_coder Sans créer une autre expression regex. Je veux extraire la valeur dans une seule expression (une ligne). – user1224096

+5

Je suis sûr que j'ai un T-shirt quelque part qui dit quelque chose sur l'analyse de HTML avec regex ........ –

Répondre

3
(?<=<[^<>]+?name="form_id"[^<>]+value=")(.*)(?=") 
1

Je viens de jeter ça ensemble. Fondamentalement, vous voulez annuler toute fin> dans votre demande. Donc, vous auriez probablement envie de faire quelque chose de cette nature:

<[^>]*hidden[^>]*value="(.*)"[^>]*> 

Et puis lisez le premier groupe de capture (Delphi instructions). Cela le maintient aussi raisonnablement générique que possible, bien qu'il assume l'ordre positionnel sur "caché" et "valeur".

Afin de trouver la valeur sans tenir compte de l'ordre, vous pouvez utiliser pourrait utiliser un peu plus propre préanalyse comme cela a été suggéré:

^(?=.*name="form_id").*value="([^"]*)".*$ 
+0

Merci, mais cela renvoie la chaîne entière, pas seulement la valeur. – user1224096

+0

La valeur est dans le premier groupe de capture. Connaissez-vous ceux-là? –

+0

Ouais, je suis désolé, totalement raté celui-là. Le premier groupe de capture renvoie la valeur, cela vous dérange-t-il de poster un exemple si la commande a été modifiée? Par exemple, si "valeur" est apparu avant "nom" – user1224096

0

<[a-zA-Z"= _^>]*value="(\d*)"/>
J'ai testé pour votre exemple.
Si vous voulez extraire pour la balise d'entrée que vous pouvez écrire:

<input[a-zA-Z"= _^>]*value="(\d*)"/>