Avatar billede lakana Nybegynder
10. oktober 2007 - 19:42 Der er 17 kommentarer og
1 løsning

Behandle hver linje

Hvordan behandler jeg hver linje med et regulært udtryk?

Jeg vil have fat i hver linje og sætte et <p>-tag omkring hver linje. Den skal bare ikke tage fat om linjer der begynder med <h[1-6]> og skal overse linjer der er tomme.

Jeg har prøvet med noget alá dette:

preg_replace( "/^(.*)/m", "<p>\\1</p>", $string )
Avatar billede nielle Nybegynder
10. oktober 2007 - 19:51 #1
Sådan?

preg_replace( "/^(?<!h[1-6])(.*)$/", "<p>$1</p>", $string)
Avatar billede nielle Nybegynder
10. oktober 2007 - 19:52 #2
preg_replace( "/^(?<!<h[1-6]>)(.*?)$/", "<p>$1</p>", $string)
Avatar billede lakana Nybegynder
10. oktober 2007 - 20:22 #3
Den påvirker slet ikke nogle af linjerne!
Avatar billede nielle Nybegynder
10. oktober 2007 - 21:00 #4
Jeg har umiddelbart lidt svært ved lige at knække denne her ... men hvad med først at lave en split på linje skift og så lave en regexp på hver linje?
Avatar billede nielle Nybegynder
10. oktober 2007 - 21:17 #5
Hvis det gøres på den måde, burde følgende pattern vær vejen:

/^(?!<h[1-6]>)(.+)$/i
Avatar billede lakana Nybegynder
11. oktober 2007 - 10:19 #6
Men den overser ikke tomme linjer!
Avatar billede lakana Nybegynder
11. oktober 2007 - 10:20 #7
.. og den tager <h?>-tag med.
Avatar billede nielle Nybegynder
11. oktober 2007 - 11:02 #8
Den burde netop ikke matche på tomme linjer - det '+'-tegn som er i møsnteret kan kun matche hvis der er minst et tegn. Linjen kan seælvfølgelig godt indeholde et eller flere blank-tegn (ergo er den ikke tom, men ser måske nok sådan ud). De situationer kan du slippe af med ved at kalde trim() på linjen først.

Den burde ikke sætte <p>...</p> rundt om linjer som starter med <h1>, <h2>, ... eller <h6>?! Hvis den alligevel gør det, så må det være fordi at den afart af regexp der benyttes i preg-funktionerne ikke er stærk nok til netop dette formål.
Avatar billede nielle Nybegynder
11. oktober 2007 - 11:03 #9
Det sidste kan godt klares, men så skal der kodes lidt mere. Der skal blot et ekstre tjek på om linjen matcher:

/^<h[1-6]/i

og hvis den gør dette, så skal den ikke igennem kaldet til preg_replace().
Avatar billede lakana Nybegynder
12. oktober 2007 - 20:48 #10
$lines = explode("\n", $string);
foreach($lines as $line)
{
    $line = trim($line);
    $t[] = preg_replace("/^(?!<h[1-6]>)(.+)$/i", "<p>$1</p>", $line);
}
$string = implode("\n", $t);


Nu undlader den tomme linjer, men den mather stadig <h?>-tags :(
Avatar billede lakana Nybegynder
12. oktober 2007 - 20:49 #11
ahh. mine <h?>-tags har også attributten "name" med! Måske det er det det skyldes!
Avatar billede lakana Nybegynder
12. oktober 2007 - 20:57 #12
$t[] = preg_replace("/^(?!<h[1-6] name=\"(.+)\">)(.+)$/i", "<p>$2</p>", $line);


Nu ser den sådan ud, men hvordan skal den rigtigt se ud, hvis jeg er fuldstændigt ligeglad med værdien af name=""?
Avatar billede lakana Nybegynder
12. oktober 2007 - 21:00 #13
men læg et svar nielle!


hvordan skal den se ud hvis den slet ikke skal godtage nogle som helst tags undtagen nogle udvalgte(<b>, <i>, <u>)?
Avatar billede nielle Nybegynder
14. oktober 2007 - 18:28 #14
> Nu ser den sådan ud, men hvordan skal den rigtigt se ud, hvis jeg er fuldstændigt ligeglad med værdien af name=""?

Jeg er ikke helt sikker på at jeg forstår hvad du mener? Den du har fundet fren til der er da ligeglad med værdien i name-attributten.

... og et svar :^)
Avatar billede nielle Nybegynder
14. oktober 2007 - 18:28 #15
...
Avatar billede nielle Nybegynder
22. oktober 2007 - 18:59 #16
Så mangler du bare at acceptere mit svar :^)
Avatar billede nielle Nybegynder
29. oktober 2007 - 18:23 #17
??
Avatar billede nielle Nybegynder
30. oktober 2007 - 22:23 #18
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester