2009-04-05 7 views

Répondre

1

Je voudrais aller avec quelque chose comme

/^([^:]+):(.*)$/ 

Ensuite, vous auriez

  • 1 $ - nom tête
  • $ 2 - valeur
+0

Approche très cleaver et minimale. Merci ça a marché. –

+0

Gardez à l'esprit qu'il s'agit d'une astuce très courante qui peut être utilisée dans plusieurs situations. –

+0

Je rends la classe de caractères [^:] + possessive, afin d'éviter un retour arrière inutile inutile: [^:] ++ – Geert

2

Juste pour que vous sachiez, cela ne gérera pas les en-têtes encapsulés. En fait, cette expression régulière prendra un en-tête enveloppé, et le préfixer à un en-tête réel. Surtout si l'en-tête enveloppé n'a pas de ":" dans les lignes suivantes.

bâtiment sur Regex de Sergej Andrejev, celui-ci se chargera de ne pas capturer les lignes enveloppées:

^([^:\s+]+):(.*)$ 

Cependant, la meilleure chose à faire, est de lire réellement la ligne d'en-têtes par ligne, et analyser en conséquence. C'est une douleur (comme je l'ai fait pour le code de production), mais c'est le plus précis.

0

Désolé, copier le mauvais code:
^ (\ S +): \ s ((\ s \ S) *)
Il fonctionne avec des lignes multiples.

+0

Cette regex est ne va pas travailler du tout. Sa syntaxe est invalide pour commencer. – Geert

+0

Désolé, copié le mauvais code: ^ (\ S +): \ s (([\ s \ S] (?!^(\ S +):)) *) Fonctionne avec plusieurs lignes. –

Questions connexes