Regex, trouver une chaine...

Eléphant du PHP | 447 Messages

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! : )
Probably (only a) Human Problem?

Eléphant du PHP | 447 Messages

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>';
		
	}
	?>
Probably (only a) Human Problem?