Toon posts:

php regexp textblock extracten

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik kom er niet uit....

ik heb een lap tekst en ik moet er een bepaald gedeelte uithalen, zie dit:
(tekst tussen de ---)
code:
1
2
3
4
5
6
7
8
Dit is een tekst

Hier staat een onderwerp:
  hoi dit is een stukje
  en nog een stukje
  en weer een stukje

hoi hier is onderwerp 2:

nu moet ik dus:
hoi dit is een stukje
en nog een stukje
en weer een stukje

extracten. maar krijg hem niet voor elkaar..... wel de eerst regel van dat stukje
maar niet het gedeelte tussen de :\n en \n\n

(blok begint dus met onderwerp:\n
en eindigd met \n\n

Iemand die weet hoe ik t voor elkaar krijg? Heb al meerdere dingen geprobeerd, maar lukt niet. Of ik krijg 1 regel, of ik krijg alles Na het onderwerp.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
wat voor regex heb je nu? en weet je zeker dat het \n is en geen \r\n?

Verwijderd

Topicstarter
hiermee krijg je te zien:
hoi dit is een stukje

probleem is dat die .* geen newlines mag, als er 2 achter elkaar staan is het blokje afgelopen. maar ik krijg die RE niet voor elkaar :(
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$tekst ="
Dit is een tekst

Onderwerp:
  hoi dit is een stukje
  en nog een stukje
  en weer een stukje

Onderwerp 2:
";

if  ( preg_match("'Onderwerp:\n(.*)\n.*'",$tekst,$regs) )
    {
            echo $regs[1];
    }

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
gewoon /Onderwerp:\n(.*)\n\n/ lijkt me? (met /g matcht . trouwens ook newlines)

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Ik zou zelf ook zoiets doen:
PHP:
1
2
  eregi("Onderwerp:\n(.*)\n\n", $stukje, $regs);
  echo $regs[1];


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

marcusk:
met /g matcht . trouwens ook newlines

da's meer een bijverschijnsel.

de /g staat voor greedy matchen. met de s modifier (dot-all) matcht de . ook newlines.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
oeps, ik bedoelde /s ja :)

volgens de php manual bestaat /g niet eens trouwens (greedy is ook default, dus niet erg nuttig als modifier)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

in php is een pcre* default greedy idd, maar om 'm ungreedy te maken kun je de 'U' modifier gebruiken (welke overigens weer niet 'pc*' is :D)

* tooltipped :+
offtopic:
html rechten roeleren

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
hmm oke ik weet het werkelijke probleem nu:

PHP:
1
2
3
4
<?
  eregi("Onderwerp:\n(.*)\n\n", $stukje, $regs); 
  echo $regs[1];
?> 

werkt inderdaad, dat had ik dus zelf ook al paar keer geprobeerd, maar waarom ik dus die andere troep nog krijg is omdat er verderop in de tekst dus nog een keer \n\n tegen komt.
Dus alles tussen de eerste onderwerp\n en de laatste \n\n geeft ie terug.
Iemand een idee hoe ik dat kan veranderen tot de eerst \n\n

???

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

goh, en ik had niet eens voor niks greedy genoemd, en de U modifier :+

Gebruik liever Perl compatible regexes die zijn veel flexibeler.

[search=regex greedy] [search=regex greediness]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1