Regex, trouver une chaine...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Regex, trouver une chaine...

Re: Regex, trouver une chaine...

par Stef » 24 avr. 2010, 17:03

J'obtiens le résultat escompté ainsi:
<?php
	$zfile = 'texte.txt';
	
	$lines = file($zfile);
	  
	foreach ($lines as $line) {
		
		if (preg_match('/[0-9]+[\s][0-9]+[\s]+[0-9]+[\s]+/', $line, $matches)) {
			
			$line = str_replace($matches, '', $line);
			
		}
		echo '<p>'.$line.'</p>';
		
		$nt = preg_split('/[\s]+/', $matches[0]);
		
		echo '<p>Chiffre 1: '.$nt[0].'</p>';
		echo '<p>Chiffre 2: '.$nt[1].'</p>';
		echo '<p>Chiffre 3: '.$nt[2].'</p>';
		
	}
	?>

Regex, trouver une chaine...

par Stef » 24 avr. 2010, 16:30

Hi,

désolé pour le titre mais je ne vois pas comment résumer autrement ce fil...

Enoncé:

j'ai un fichier texte, texte.txt, qui contient des centaines de lignes sous la forme:

010 1 2 Lorem ipsum truc machin......................... lorem.
010 1 3 Lorem ipsum truc machin......................... lorem.
010 1 4 Lorem ipsum truc machin......................... lorem.

Je veux insérer dans une base de données tout le contenu de ce fichier... Pour ce faire je dois traiter chaque ligne:

Je retranche la série de chiffre au début de chaque ligne pour ne conserver que le texte qui sera inséré dans le champ "phrase" d'une nouvelle ligne de la table. Pour cette ligne je dois insérer avec la phrase, 3 autres champs qui correspondent aux 3 numéros de la série de chiffre (séparés par des espaces) au début de chaque ligne du fichier texte.

Mon 1er souci c'est la regex qui va pouvoir me permettre de dissocier la série de chiffre du reste de la ligne (je verrais après pour le traitement des chiffres); alors j'ai commencé comme ça:
<?php
	$zfile = 'texte.txt';
	
	$lines = file($zfile);
	  
	foreach ($lines as $line) {
		
		if (preg_match('/^[0-9]+[:space:][0-9]+[:space:]+[0-9]+[:space:]+$/', $line, $matches)) {
			
			$line = str_replace($matches, '', $line);
			
		}
		echo '<p>'.$line.'</p>';
		
	}
	?>
Qu'est-ce qui cloche dans ma regex? Pourquoi ça marche pas?

Merci bien pour votre aide! : )