[php] reg exp met alles voor

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Na het lezen van vele turorials en veel zoeken snap ik het nog niet.

Ik heb een string
code:
1
2
Dit is
een string


Met een "\n" (new line charater). Nu wil ik alles voor en incusief \n verwijderen.
code:
1
2
Dit is
een string
met worden
code:
1
een string

MAar ik kom er niet uit, ik zit me nu a de hele morgen blind te staren op dit probleem en er is een beetje haast bij (deadline enzo)

Wat ik zelf geprobeerd heb
PHP:
1
$some_var = preg_replace("/[a-zA-Z0-9]\n/"," ",$some_other_var)

En vele variaten daar op, maar deze zit het dichts in de buurt
Maar $some_other_var is het zelfe als $some_var. Er wordt dus niks replaced

Acties:
  • 0 Henk 'm!

  • Akerboom
  • Registratie: Juni 2001
  • Laatst online: 07-07 16:30

Akerboom

Codito, ergo sum

zoek de laatste '\n' in de string... geen regex. voor nodig...
[edit]
http://nl.php.net/manual/en/function.strrchr.php

^ het voorbeeld van php.net zelf is wat jij wilt volgens mij ?!

[ Voor 54% gewijzigd door Akerboom op 19-12-2003 11:00 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
$newstring = substr($string, strrpos($string, '\n') + 1);


Zoiets? (met hulp van TormentoR ;))

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Whoohoo :D Dat is het

Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19:04
preg_replace zoekt uit zichzelf niet verder dan de eerste new-line. Wil je een regexps gebruiken met newlines, moet je de m-modifier gebruiken:
PHP:
1
preg_replace("/[zoeken]/m","vervang",$string);

m staat voor multiline

edit:
preg_replace ondersteund uit zichzelf geen newlines --> preg_replace zoekt uit zichzelf niet verder dan de eerste new-line

[ Voor 49% gewijzigd door FlowinG op 22-12-2003 14:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

preg_replace ondersteunt wel newlines (\n)

zie ook http://nl.php.net/manual/en/pcre.pattern.syntax.php
A second use of backslash provides a way of encoding non-printing characters in patterns in a visible manner. There is no restriction on the appearance of non-printing characters, apart from the binary zero that terminates a pattern, but when a pattern is being prepared by text editing, it is usually easier to use one of the following escape sequences than the binary character it represents:

\a

alarm, that is, the BEL character (hex 07)
\cx

"control-x", where x is any character
\e

escape (hex 1B)
\f

formfeed (hex 0C)
\n

newline (hex 0A)

\r

carriage return (hex 0D)
\t

tab (hex 09)
\xhh

character with hex code hh
\ddd

character with octal code ddd, or backreference

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

FlowinG:
preg_replace zoekt uit zichzelf niet verder dan de eerste new-line. Wil je een regexps gebruiken met newlines, moet je de m-modifier gebruiken:
PHP:
1
preg_replace("/[zoeken]/m","vervang",$string);

m staat voor multiline
Kletskoek ;)

Het verschil tussen multiline en singleline regexen is dat een begin- en and-anchor ( resp. ^ en $) op het begin en eind van een regel matchen ipv. op het begin en eind van een (volledige) string (inclusief newlines).

Jij bent in de war met de 's' modifier, die gebruikt om de dot metacharacter ook newlines te laten matchen (dot-all), maar dat zegt niets over het wel of niet matchen op een newline die letterlijk in de regex staat.
Suepahfly:
Wat ik zelf geprobeerd heb
PHP:
1
$some_var = preg_replace("/[a-zA-Z0-9]\n/"," ",$some_other_var)

En vele variaten daar op, maar deze zit het dichts in de buurt
Maar $some_other_var is het zelfe als $some_var. Er wordt dus niks replaced
De fout in deze regex is dat je geen herhaling van je class toelaat. Je wilt hier dus matchen op:
Eén letter tussen a-z, A-Z of cijfer tussen 0-9 en dan direct een newline
Dat is natuurlijk niet de bedoeling, want je wilt alles totaan de newline replacen. Kortom, begin bij het begin van de string, match alles wat geen newline is, match een newline en replace dat met '':
code:
1
preg_replace ( '/^[^\n]*\n/', '', $str );

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

Pagina: 1