2010-09-14 27 views
0

Ceci est le contenu d'un champ de table mysql:PHP: Comment trouver le début et la fin d'une sous-chaîne dans une chaîne?

Flash LEDs: 0.5W 
LED lamps: 5mm 
Low Powers: 0.06W, 0.2W 
Remarks(1): this is remark1 
---------- 
Accessories: Light Engine 
Lifestyle Lights: Ambion, Crane Fun 
Office Lights: OL-Deluxe Series 
Street Lights: Dolphin 
Retrofits: SL-10A, SL-60A 
Remarks(2): this is remark2 
---------- 
Infrared Receiver Module: High Data Rate Short Burst 
Optical Sensors: Ambient Light Sensor, Proximity Sensor, RGB Color Sensor 
Photo Coupler: Transistor 
Remarks(3): this is remark3 
---------- 
Display: Dot Matrix 
Remarks(4): this is remark4 

Maintenant, je veux lire les remarques et les stocker dans une variable. Les remarques (1), les remarques (2), etc. sont fixées. 'ceci est remarque1', etc. viennent des champs de saisie de formulaire, donc ils sont flexibles.

Fondamentalement ce dont j'ai besoin est: Lisez tout entre 'Remarques (1):' et '--------' et enregistrez-le dans une variable.

Merci pour votre aide.

+0

Est-ce que ces remarques couvrent toujours une seule ligne? – NullUserException

+1

Pourquoi avez-vous besoin de faire cela? Les données devraient probablement être stockées dans une structure de table appropriée dans la base de données. – Jords

Répondre

1

Vous pouvez utiliser regex:

preg_match_all("~Remarks\(([^)]+)\):([^\n]+)~", $str, $m); 

Comme on le voit sur ideone.

Le regex mettra X dans le groupe de correspondance 1, Y dans le groupe de correspondance 2 (Remarques (X): Y)

+0

Un grand merci, ça marche pour moi. Mais comment sauvegarder chaque remarque dans une variable séparée? –

+0

Ils seront dans un tableau ('$ m [2]'), donc vous pourriez faire 'list ($ remarque1, $ remarque2, $ remarque3, $ remarque4) = $ m [2])'. Mais un tableau semble plus propre IMO (par exemple: '$ remarques = $ m [2]') – NullUserException

0

Ce serait un travail pour les expressions régulières, qui vous permettent de faire correspondre exactement les types de règles que vos exigences expriment. Here est un tutoriel pour vous.

0

Utilisez la fonction preg pour cela ou sinon vous pouvez exploser et imploser fonction pour obtenir un résultat correct. N'utilisez pas Substring il peut ne pas fournir de correction.

Exemple de Implode et Explode fonction de votre chaîne de requête:

$sdr = "Remarks(4): this is remark4"; 

    $sdr1 = explode(":",$sdr); 
    $frst = $sdr1[0]; 

    $sdr2 = array_shift($sdr1); 

    $secnd = implode(" ", $sdr1); 

    echo "First String - ".$frst; 
    echo "<br>"; 
    echo "Second String - ".$secnd; 
    echo "<br>"; 

Votre réponse:

First String - Remarks(4) 

Second String - this is remark4