/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Dynamisk stylesheet samt content
Fra : Lasse Jensen


Dato : 10-05-08 16:42

Hej gutter.

Jeg sidder og er lidt i tvivl om hvordan jeg skal udføre et
stykke arbejde. Det er en online tekst editor jeg arbejder på,
som sender nyhedsbrev ud. Man kan lave forskellige farver på
teksten, og jeg skal bruge en smart måde, så jeg kan finde nogle
bestemte ting i koden, isolere det i en variabel, tælle hvor
mange af dem der er, og give dem tal fra 1, 2 og så videre, mens
jeg skal udskifte noget i dem til sidst.

Den sidste funktion bruges str_replace evt. bare. Men det med at
finde et bestemt i koden og ligge dem i forskellige variabler
derned af, er jeg lidt i tvivl om.

Har I nogle gode løsninger? :)

På forhånd tak.

Mvh. Lasse Jensen



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lasse Jensen (11-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 11-05-08 00:55

For at forklare det mere simpelt:

1. Gennensøg kode
2. Isolér fundne objekter.
3. Først-fumdne objekt = Var1, anden objekt = Var2 og så videre..

Så skal bruge en funktion som kigger koden igennem for den valgte
parameter, og derefter smider det i et array. Resten burde jeg
selv kunne hitte ud af.

Mvh. Lasse Jensen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin (11-05-2008)
Kommentar
Fra : Martin


Dato : 11-05-08 01:32

Lasse Jensen wrote:
> For at forklare det mere simpelt:
>
> 1. Gennensøg kode

preg er fantastisk

> 2. Isolér fundne objekter.

Det sker i #1

> 3. Først-fumdne objekt = Var1, anden objekt = Var2 og så videre..

$i=0;
foreach($preg_matches AS $match) {
$i++;
$var{$i} = $match;
}

>
> Så skal bruge en funktion som kigger koden igennem for den valgte
> parameter, og derefter smider det i et array. Resten burde jeg
> selv kunne hitte ud af.

preg_match_all er fortræffelig!

Lad os antage du vil finde alt inde i <b>'er

$content = '
<b>noget tekst her</b>
<b>noget andet tekst her</b>
';

preg_match_all('/<b>(.*?)<\/b>/', $content, $out);

var_dump($out);

Giver så dette

array
0 =>
array
0 => string '<b>noget tekst her</b>' (length=22)
1 => string '<b>noget andet tekst her</b>' (length=28)
1 =>
array
0 => string 'noget tekst her' (length=15)
1 => string 'noget andet tekst her' (length=21)

Lad os lege lidt videre, og sætte noget style ind i <div>, som vi gerne
vil have

$content = '
<div style="font-weight:bold;">noget tekst her</div>
<div>noget andet tekst her</div>
';

preg_match_all('/<div style="(.*?)">(.*?)<\/div>/', $content, $out);
var_dump($out);

Resulterer i

array
0 =>
array
0 => string '<div style="font-weight:bold;">noget tekst
her</div>' (length=52)
1 =>
array
0 => string 'font-weight:bold;' (length=17)
2 =>
array
0 => string 'noget tekst her' (length=15)

"The complete guide" bogen til perl regular expression er på omkring 500
sider, så perl regular expression motoren er STOR :)

Lasse Jensen (11-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 11-05-08 09:16

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> "The complete guide" bogen til perl regular expression er på omkring 500
> sider, så perl regular expression motoren er STOR :)

Jeg har arbejdet med regex før, og der ligger end hel del i det må man
sige! Jeg er heller ikke ligefrem helt inde i det endnu, som du kan se.

Men mange tak for eksemplet ovenover. Det ser jo ganske overskueligt og
logisk ud :) Umiddelbart vil det fungere som det skal efter mit behov,
udfra hvad jeg kan se bare ved at læse indlægget.

Tak for det :)

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Michael Zedeler (11-05-2008)
Kommentar
Fra : Michael Zedeler


Dato : 11-05-08 09:30

Martin wrote:
> [...]
> "The complete guide" bogen til perl regular expression er på omkring 500
> sider, så perl regular expression motoren er STOR :)

Hehe. De forskellige konstruktioner indenfor standard pcre som alle
bruger er der ikke så mange af. perls manual der dækker hele området
plus udvidede regulære udtryk fylder vel 20 sider. At det så er
indviklet at lære at bruge, er en anden sag.

Jeg har da også set en bog på 1000 sider om asp. Det får mig ikke til at
konkludere at asp er "stort"...

Mvh. Michael.

Peter Brodersen (11-05-2008)
Kommentar
Fra : Peter Brodersen


Dato : 11-05-08 10:00

On Sun, 11 May 2008 10:30:17 +0200, Michael Zedeler <michael@zedeler.dk>
wrote:

>> "The complete guide" bogen til perl regular expression er på omkring 500
>> sider, så perl regular expression motoren er STOR :)
>
>Hehe. De forskellige konstruktioner indenfor standard pcre som alle
>bruger er der ikke så mange af. perls manual der dækker hele området
>plus udvidede regulære udtryk fylder vel 20 sider. At det så er
>indviklet at lære at bruge, er en anden sag.
>
>Jeg har da også set en bog på 1000 sider om asp. Det får mig ikke til at
>konkludere at asp er "stort"...

Det er vel ikke så meget anderledes end skak, m.m.

Simple regler, let at lære syntaksen, sværere at forstå og udnytte det
fulde potentiale.

--
- Peter Brodersen
Kendt fra Internet

Lasse Jensen (11-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 11-05-08 10:04

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> preg_match_all('/<b>(.*?)<\/b>/', $content, $out);
>

Har lige lidt problemer umiddelbart. Virker fint på <b> som i eksemplet.
Men jeg skal bruge funktionen på denne linie:

<span style="color: #ff0000;">sxsxsxsx</span>

dermed et regex,

preg_match_all('/<span style="color: (.*?);">(.*?)<\/span>/', $description,
$colorIsolator);

Er der fejl i det siden arrays er tomme? Muligvis pågrund af # i
hexadecimalen?

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Peter Brodersen (11-05-2008)
Kommentar
Fra : Peter Brodersen


Dato : 11-05-08 22:08

On 11 May 2008 09:03:33 GMT, Lasse Jensen <antispam@antispam.dk> wrote:

><span style="color: #ff0000;">sxsxsxsx</span>
>
>dermed et regex,
>
>preg_match_all('/<span style="color: (.*?);">(.*?)<\/span>/', $description,
>$colorIsolator);
>
>Er der fejl i det siden arrays er tomme? Muligvis pågrund af # i
>hexadecimalen?

Her virker dit eksempel fint:

<?php
$description = '<span style="color: #ff0000;">sxsxsxsx</span>';
preg_match_all('/<span style="color: (.*?);">(.*?)<\/span>/',
$description, $colorIsolator);
var_dump($colorIsolator);
?>

Output:

array(3) {
[0]=>
array(1) {
[0]=>
string(45) "<span style="color: #ff0000;">sxsxsxsx</span>"
}
[1]=>
array(1) {
[0]=>
string(7) "#ff0000"
}
[2]=>
array(1) {
[0]=>
string(8) "sxsxsxsx"
}
}



Bemærk dog, at . ikke matcher newlines, så hvis din $description
indeholder linjeskift mellem <span ...> og </span>, så vil dit regulære
udtryk ikke kunne matche.

--
- Peter Brodersen
Kendt fra Internet

Lasse Jensen (12-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 12-05-08 13:32

Peter Brodersen wrote in dk.edb.internet.webdesign.serverside.php:
>
> Her virker dit eksempel fint:

Det virker også fint hos mig, hvis jeg smider det ind i end tom fil af afprøver
det. Men lige så snart det er på resten af scriptet, forbliver de sku tomme.
Hmm.

> Bemærk dog, at . ikke matcher newlines, så hvis din $description
> indeholder linjeskift mellem <span ...> og </span>, så vil dit regulære
> udtryk ikke kunne matche.

Det kunne muligvis godt være pågrund af linieskift. Men er det virkelig bare at
fjerne . så, eller skal jeg have noget alá [^\n] ind et sted?

Mvh. Lasse Jensen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Peter Brodersen (12-05-2008)
Kommentar
Fra : Peter Brodersen


Dato : 12-05-08 14:34

On 12 May 2008 12:31:33 GMT, Lasse Jensen <antispam@antispam.dk> wrote:

>> Bemærk dog, at . ikke matcher newlines, så hvis din $description
>> indeholder linjeskift mellem <span ...> og </span>, så vil dit regulære
>> udtryk ikke kunne matche.
>Det kunne muligvis godt være pågrund af linieskift. Men er det virkelig bare at
>fjerne . så, eller skal jeg have noget alá [^\n] ind et sted?

.. matcher et vilkårligt tegn - dog ikke linjeskift. Det kan du dog godt få
den til ved at tilføje s som flag i slutningen af dit regulære udtryk:

preg_match_all('/<span style="color: (.*?);">(.*?)<\/span>/s',
$description, $colorIsolator);


--
- Peter Brodersen
Kendt fra Internet

Martin (12-05-2008)
Kommentar
Fra : Martin


Dato : 12-05-08 15:38

Peter Brodersen wrote:
> On 12 May 2008 12:31:33 GMT, Lasse Jensen <antispam@antispam.dk> wrote:
>
>>> Bemærk dog, at . ikke matcher newlines, så hvis din $description
>>> indeholder linjeskift mellem <span ...> og </span>, så vil dit regulære
>>> udtryk ikke kunne matche.
>> Det kunne muligvis godt være pågrund af linieskift. Men er det virkelig bare at
>> fjerne . så, eller skal jeg have noget alá [^\n] ind et sted?
>
> . matcher et vilkårligt tegn - dog ikke linjeskift. Det kan du dog godt få
> den til ved at tilføje s som flag i slutningen af dit regulære udtryk:

Nemlig
Iøvrigt ville jeg nok også sætte et i som flag tilsidst, så det er case
insenstive

Altså så <span er det samme som <SPAN

>
> preg_match_all('/<span style="color: (.*?);">(.*?)<\/span>/s',
> $description, $colorIsolator);

Jeg ville nok også fjerne mellerummet mellem color: og (.*?), også lave en

preg_match_all('/<span style="color:(.*?);">(.*?)<\/span>/si',
$description, $colorIsolator);

$colorIsolator = array_map('trim',$colorIsolator);
// for at få trimmet arrayet

Lasse Jensen (12-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 12-05-08 20:16

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> Jeg ville nok også fjerne mellerummet mellem color: og (.*?).

Vil den så matche noget i koden? Det står med mellemrum, det som den skal finde.

Mvh. Lasse Jensen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Jensen (12-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 12-05-08 20:24

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> Jeg ville nok også fjerne mellerummet mellem color: og (.*?), også lave en
>
> preg_match_all('/<span style="color:(.*?);">(.*?)<\/span>/si',
> $description, $colorIsolator);
>

Det virker desværre stadig ikke, selvom s og i er tilføjet. Og har prøvet både med og
uden mellemrum, hvilket ingen forskel gør.

Det står sådan her i koden:

<div class="content_newsletter"><p style="margin: 0px"><span style="color:
#ff9900;">fghfghfgh</span></p></div>

Selvom den søgte parameter er pakket ind i omkringliggende kode, burde den så ikke
kunne finde den?

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin (13-05-2008)
Kommentar
Fra : Martin


Dato : 13-05-08 00:52

Lasse Jensen wrote:
> Martin wrote in dk.edb.internet.webdesign.serverside.php:
>>
>> Jeg ville nok også fjerne mellerummet mellem color: og (.*?), også lave en
>>
>> preg_match_all('/<span style="color:(.*?);">(.*?)<\/span>/si',
>> $description, $colorIsolator);
>>
>
> Det virker desværre stadig ikke, selvom s og i er tilføjet. Og har prøvet både med og
> uden mellemrum, hvilket ingen forskel gør.
>
> Det står sådan her i koden:
>
> <div class="content_newsletter"><p style="margin: 0px"><span style="color:
> #ff9900;">fghfghfgh</span></p></div>
>
> Selvom den søgte parameter er pakket ind i omkringliggende kode, burde den så ikke
> kunne finde den?

Jo da, og det gør den nu altså også ganske som den skal
<http://aarhof.eu/newsgroup/php/preg_match_all.php>

Lasse Jensen (13-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 13-05-08 22:31

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> Jo da, og det gør den nu altså også ganske som den skal
> <http://aarhof.eu/newsgroup/php/preg_match_all.php>

Jeg har testet det lidt igennem, og det virker fint nok.
Grunden til arrays er tomme, er fordi når man submitter, nulstilles det hele og dermed er
variablerne tomme. Hvis jeg bruger det i den fil, hvor jeg henter det ud af databasen,
virker det fint nok :)

Jeg vil arbejde videre med det, og se om jeg kan få det til at hænge sammen.

Mange tak for hjælpen :)

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Jensen (15-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 15-05-08 16:52

Martin wrote in dk.edb.internet.webdesign.serverside.php:
>
> > 3. Først-fumdne objekt = Var1, anden objekt = Var2 og så videre..
>
> $i=0;
> foreach($preg_matches AS $match) {
> $i++;
> $var{$i} = $match;
> }
>

Synes ikke lige jeg kan få dette til at funke.
Jeg har nu mit regex, der smider indholdet i et array.

Hvis den nu finder 2 farver, var planen at jeg skulle ende ud med dette:

$hex1 = #ffffff;
$hex2 = #000000;

Umiddelbart synes det ikke at virke, hvis man skriver,

$i=0;
foreach($colorIsolator[2] AS $match) {
$i++;
$var{$i} = $match;
}

Den burda da ellers hive det ud fra array 2 og liste det?

På forhånd tak (:

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Jensen (18-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 18-05-08 20:52

Lasse Jensen wrote in dk.edb.internet.webdesign.serverside.php:
>
> Umiddelbart synes det ikke at virke, hvis man skriver,
>
> $i=0;
> foreach($colorIsolator[2] AS $match) {
> $i++;
> $var{$i} = $match;
> }
>

Anyone?

Mvh. Lasse Jensen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Jensen (19-05-2008)
Kommentar
Fra : Lasse Jensen


Dato : 19-05-08 11:18

Har fundet ud af det.

Den rigtige løsning var,

foreach($colorIsolator[1] AS $match) {
                        
$hexa++;
$color++;
$hexa = $match;

}

Mvh. Lasse Jensen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste