Oprettet lør. d. 20. december 2008 kl. 23:43:25

hf2ke
hf2ke (5.637 point. Point ude: 0)

Regular expressions: Fejl

Hej eksperter,

http://www.ovrkll.com/ (...) får jeg følgende fejl:


Warning: preg_replace() [function.preg-replace]: Unknown modifier 'h' in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php on line 130

Den relevante kode er som følger:

    class Formatting
    {
        public static $Patterns = array
        (
            "h1" => "/\[h1\](.*?)\[/h1\]/",
            "h2" => "/\[h2\](.*?)\[/h2\]/",
            "h3" => "/\[h3\](.*?)\[/h3\]/",
            "b" => "/\[b\](.*?)\[/b\]/",
            "i" => "/\[i\](.*?)\[/i\]/",
            "u" => "/\[u\](.*?)\[/u\]/",
            "il1" => "/\[il\](.*?)\[/il\]/e",
            "il2" => "/\[il=*.?\](.*?)\[/il\]/e",
            "el1" => "/\[el\](.*?)\[/el\]",
            "el2" => "/\[el=.*?\](.*?)\[/el\]"
        );
       
        public static $Replacements = array
        (
            "h1" => "<h1>$1</h1>",
            "h2" => "<h2>$1</h2>",
            "h3" => "<h3>$1</h3>",
            "b" => "<b>$1</b>",
            "i" => "<i>$1</i>",
            "u" => "<u>$1</u>",
            "il1" => "'<a title=\"'.Page::GetPage(\\0, true)->Title.'\" href=\"?location=\\0\">'.Page::LastPage(\\0)->Title.'</a>'",
            "il2" => "'<a title=\"'.Page::GetPage(\\0)->Title.'\" href=\"?location=\\0\">\\1</a>'",
            "il2" => "'<a title=\"'.Page::GetPage(\\0)->Title.'\" href=\"?location=\\0\">\\1</a>'",
            "el1" => "<a title=\"$1\" href=\"$1\">$1</a>",
            "el2" => "<a title=\"$2\" href=\"$1\">$2</a>"
        );
       
        public static function Convert($string)
        {
            return preg_replace(self::$Patterns, self::$Replacements, $string); // Linje 130
        }

Hvad er der galt?

Skrevet søn. d. 21. december 2008 kl. 01:43:11| #1

micc
micc (7.860 point)
Du har glemt at escape nogen (alle?) af dine /'er. Se på fx den første expression:
  /\[h1\](.*?)\[/h1\]/
Den afsluttees lige før h pga. /'en og derfor antager php at den resterende del af strengen
  h1\]/
er flags. I det konkrete eksempel skulle strengen istedet være
  /\[h1\](.*?)\[\/h1\]/

Skrevet søn. d. 21. december 2008 kl. 01:49:11| #2

coderdk
coderdk (160.399 point)
Hvis du bruger mange / i dine expressions, kan det være smartere at bruge en anden delimiter som f.eks. #, e.g. den første "/\[h1\](.*?)\[/h1\]/" bliver til "#\[h1\](.*?)\[/h1\]#"

Skrevet søn. d. 21. december 2008 kl. 09:53:56| #3

hf2ke
hf2ke (5.637 point)
Aha. Damn, jeg synes godt nok, RE-konteksten er forvirrende. Jeg prøver lige...

Skrevet søn. d. 21. december 2008 kl. 10:46:44| #4

hf2ke
hf2ke (5.637 point)
Jeg får nogle fejl og har rodet lidt rundt...

    class Formatting
    {
        public static $Patterns = array
        (
            "h1" => "#\[h1\](.*?)\[/h1\]#",
            "h2" => "#\[h2\](.*?)\[/h2\]#",
            "h3" => "#\[h3\](.*?)\[/h3\]#",
            "b" => "#\[b\](.*?)\[/b\]#",
            "i" => "#\[i\](.*?)\[/i\]#",
            "u" => "#\[u\](.*?)\[/u\]#",
            "il1" => "#\[il\](.*?)\[/il\]#e",
            "il2" => "#\[il=*.?\](.*?)\[/il\]#e",
            "el1" => "#\[el\]([0-9a-zA-Z_-]+)\.([a-z]{2,4})[/el\]#",
            "el2" => "#\[el\]([0-9a-zA-Z_-]+)\.([a-z]{2,4})/(.+)[/el\]#",
            "el3" => "#\[el=([0-9a-zA-Z_-]+)\.([a-z]{2,4})\](.+)\[/el\]#",
            "el4" => "#\[el=([0-9a-zA-Z_-]+)\.([a-z]{2,4})/(.+)\](.+)\[/el\]#"
        );
       
        public static $Replacements = array
        (
            "h1" => "<h1>$1</h1>",
            "h2" => "<h2>$1</h2>",
            "h3" => "<h3>$1</h3>",
            "b" => "<b>$1</b>",
            "i" => "<i>$1</i>",
            "u" => "<u>$1</u>",
            "il1" => "'<a title=\"'.Page::GetPage(\\0, true)->Title.'\" href=\"?location=\\0\">'.Page::LastPage(\\0)->Title.'</a>'",
            "il2" => "'<a title=\"'.Page::GetPage(\\0)->Title.'\" href=\"?location=\\0\">\\1</a>'",
            "el1" => "<a title=\"www.$1\" href=\"http://www.$1/ (...) target=\"_blank\">$1</a>",
            "el2" => "<a title=\"www.$1\" href=\"http://www.$1\" target=\"_blank\">$1</a>",
            "el3" => "<a title=\"www.$1\" href=\"http://www.$1/ (...) target=\"_blank\">$2</a>",
            "el4" => "<a title=\"www.$1\" href=\"http://www.$1\" target=\"_blank\">$2</a>"
        );
       
        public static function Convert($string)
        {
            return preg_replace(self::$Patterns, self::$Replacements, $string);
        }
    }

echo Formatting::Convert("[el]google.com[/el]");

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 42 in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php on line 133

Skrevet søn. d. 21. december 2008 kl. 10:53:48| #5

hf2ke
hf2ke (5.637 point)
Okaj, fejlen var åbenlys. Never mind.

Skrevet søn. d. 21. december 2008 kl. 11:01:52| #6

hf2ke
hf2ke (5.637 point)
Alle funktioner til eksterne links, givet ved [el]target[/el] og [el=target]title[/el], fungerer nu. Så kommer det svære: Interne links!

Jeg har rettet lidt:

    class Formatting
    {
        public static $Patterns = array
        (
            "h1" => "#\[h1\](.*?)\[/h1\]#",
            "h2" => "#\[h2\](.*?)\[/h2\]#",
            "h3" => "#\[h3\](.*?)\[/h3\]#",
            "b" => "#\[b\](.*?)\[/b\]#",
            "i" => "#\[i\](.*?)\[/i\]#",
            "u" => "#\[u\](.*?)\[/u\]#",
            "il1" => "#\[il\](.*?)\[/il\]#e",
            "il2" => "#\[il=*.?\](.*?)\[/il\]#e",
            "el1" => "#\[el\]([0-9a-zA-Z_-]+)\.([a-z]{2,4})\[/el\]#",
            "el2" => "#\[el\]([0-9a-zA-Z_-]+)\.([a-z]{2,4})/(.+)\[/el\]#",
            "el3" => "#\[el=([0-9a-zA-Z_-]+)\.([a-z]{2,4})\](.+)\[/el\]#",
            "el4" => "#\[el=([0-9a-zA-Z_-]+)\.([a-z]{2,4})/(.+)\](.+)\[/el\]#"
        );
       
        public static $Replacements = array
        (
            "h1" => "<h1>$1</h1>",
            "h2" => "<h2>$1</h2>",
            "h3" => "<h3>$1</h3>",
            "b" => "<b>$1</b>",
            "i" => "<i>$1</i>",
            "u" => "<u>$1</u>",
            "il1" => "'<a title=\"'.Page::GetPage(\\0, true)->Title.'\" href=\"?location=\\0\">'.Page::LastPage(\\0)->Title.'</a>'",
            "il2" => "'<a title=\"'.Page::GetPage(\\0)->Title.'\" href=\"?location=\\0\">\\1</a>'",
            "el1" => "<a title=\"www.$1.$2\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$1.$2</a>",
            "el2" => "<a title=\"www.$1.$2/$3\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$1.$2/$3</a>",
            "el3" => "<a title=\"www.$1.$2\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$3</a>",
            "el4" => "<a title=\"www.$1.$2/$3\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$4</a>"
        );
       
        public static function Convert($string)
        {
            return preg_replace(self::$Patterns, self::$Replacements, $string);
        }
    }

echo Formatting::Convert("[il]mapping[/il]");

Ovenstående skulle gerne give:

<a title="Mapping" href="?location=mapping">Mapping</a>

Men jeg får følgende fejl:

Parse error: syntax error, unexpected '[', expecting ')' in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php(133) : regexp code on line 1

Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: '&lt;a title=&quot;'.Page::GetPage([il]mapping[/il], true)-&gt;Title.'&quot; href=&quot;?location=[il]mapping[/il]&quot;&gt;'.Page::LastPage([il]mapping[/il])-&gt;Title.'&lt;/a&gt;' in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php on line 133

Igen kan "resultatet" ses på http://www.ovrkll.com/ (...) .

Skrevet søn. d. 21. december 2008 kl. 11:03:30| #7

hf2ke
hf2ke (5.637 point)
Det skal lige siges, at klassen Page indeholder informationer om hver side hentet fra en databasetabel først i PHP-koden. Page::GetPage-funktionen (statisk) henter en side ud fra dennes adresse.

Skrevet søn. d. 21. december 2008 kl. 23:08:29| #8

hf2ke
hf2ke (5.637 point)
Ingen hjælp at hente? :(

Skrevet tor. d. 25. december 2008 kl. 19:45:53| #9

hf2ke
hf2ke (5.637 point)
Så! Nu har jeg endelig fået skidtet til at fungere. Der er dog et lille problem:

http://www.ovrkll.com/ (...)

Altså:

LOL![/il]
[il=home]LOL 2!
Mapping

PHP kan tilsyneladende godt lide at fortolke start og slut på formatteringskoden som en del af indholdet. Hvordan undgår jeg dette? Koden ses herunder:

"#\[il=([0-9a-z_-]+)\](.+)\[/il\]#e"

Og

'\'<a title="\'.Page::GetPage($1)->Title.\'" href="?location=$1">$2</a>\''

Skrevet tor. d. 25. december 2008 kl. 19:55:47| #10

coderdk
coderdk (160.399 point)
"#\[il=([0-9a-z_-]+)\](.+)\[/il\]#e"

skal nok være

"#\[il=([0-9a-z_-]+)\](.+?)\[/il\]#e"

Skrevet tor. d. 25. december 2008 kl. 21:23:55| #11

hf2ke
hf2ke (5.637 point)
Ja... Den er sgu god nok - men hvorfor? Nogen der kender en teknisk forklaring på, hvorfor jeg ikke kan kræve, at der står noget mellem [il=$1] og [/il]?

Skrevet tor. d. 25. december 2008 kl. 21:53:00| #12

coderdk
coderdk (160.399 point)
Det hedder "greediness". Hvis du har en streng "YXXZXXZ" vil X.+X vil matche XXZXXZ mens X.+?Z kun vil matche XXZ...

Skrevet tor. d. 25. december 2008 kl. 22:06:10| #13

hf2ke
hf2ke (5.637 point)
Weird... Men tak :) Bare smid et svar - jeg tror, jeg har styr på det hele lige om snart.

Skrevet tor. d. 25. december 2008 kl. 22:17:32| #14

coderdk
coderdk (160.399 point)
Cool :) Regex er et godt værktøj at kunne :D

Skrevet fre. d. 26. december 2008 kl. 00:08:28| #15

hf2ke
hf2ke (5.637 point)
Jeps... Men selvfølgelig slap jeg ikke så let!

Prøv lige at se her:

www.ovrkll.com/development

Der kommer nogle store grimme vertikale mellemrum. Årsagen er, at mit script til fjernelse af linjeskift lige før og efter div-tags ikke fungerer. Koden er som følger:

public static $Patterns = array
        (
            "h1" => "#\[h1\](.+)\[/h1\]#",
            "h2" => "#\[h2\](.+)\[/h2\]#",
            "h3" => "#\[h3\](.+)\[/h3\]#",
            "b" => "#\[b\](.+)\[/b\]#",
            "i" => "#\[i\](.+)\[/i\]#",
            "u" => "#\[u\](.+)\[/u\]#",
            "il1" => "#\[il\]([0-9a-z_-]+)\[/il\]#e",
            "il2" => "#\[il=([0-9a-z_-]+)\](.+?)\[/il\]#e",
            "el1" => "#\[el\]([0-9a-z_-]+)\.([a-z]{2,4})\[/el\]#",
            "el2" => "#\[el\]([0-9a-z_-]+)\.([a-z]{2,4})/(.+)\[/el\]#",
            "el3" => "#\[el=([0-9a-z_-]+)\.([a-z]{2,4})\](.+)\[/el\]#",
            "el4" => "#\[el=([0-9a-z_-]+)\.([a-z]{2,4})/(.+)\](.+)\[/el\]#",
            "m1" => "#\[m\]([0-9a-zA-Z_-]+)@([0-9a-z_-]+)\.([a-z]{2,4})\[/m\]#",
            "m2" => "#\[m=([0-9a-zA-Z_-]+)@([0-9a-z_-]+)\.([a-z]{2,4})\](.+)\[/m\]#",
            "s" => "#\[s=(.+)\](((.+) )+?.+)\[/s\]#e",
            "n1" => "#(((\n)|(<br>))*?)<div(.*?)>(.*?)</div>(((\n)|(<br>))*?)#",
            "n2" => "#\n#"
        );
       
        public static $Replacements = array
        (
            "h1" => "<h1>$1</h1>",
            "h2" => "<h2>$1</h2>",
            "h3" => "<h3>$1</h3>",
            "b" => "<b>$1</b>",
            "i" => "<i>$1</i>",
            "u" => "<u>$1</u>",
            "il1" => '\'<a title="\'.Page::GetPage($1, true)->Title.\'" href="?location=$1">\'.Page::$LastPage->Title.\'</a>\'',
            "il2" => '\'<a title="\'.Page::GetPage($1)->Title.\'" href="?location=$1">$2</a>\'',
            "el1" => "<a title=\"www.$1.$2\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$1.$2</a>",
            "el2" => "<a title=\"www.$1.$2/$3\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$1.$2/$3</a>",
            "el3" => "<a title=\"www.$1.$2\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$3</a>",
            "el4" => "<a title=\"www.$1.$2/$3\" href=\"http://www.$1.$2/ (...) target=\"_blank\">$4</a>",
            "m1" => "<a title=\"$1@$2.$3\" href=\"mailto:$1@$2.$3\">$1@$2.$3</a>",
            "m2" => "<a title=\"$1@$2.$3\" href=\"mailto:$1@$2.$3\">$4</a>",
            "s" => '\'<div class="screenshots">$1</div><div>\'.Formatting::ArrangeScreenshots($2, $1).\'</div>\'',
            "n1" => "<div$1>$2</div>",
            "n2" => "<br>"
        );
       
        public static function Convert($string)
        {
            return preg_replace(self::$Patterns, self::$Replacements, $string);
        }

Kildekoden bliver:

<div class="content"><div>Welcome to OVKRLL.com!</div><div>Toke Skovbo Krainert's official portfolio</div><div>On OVRKLL.com you will find most of my work with mapping, modding and programming as well as frequently updated news and information about me and my site.</div><h1>News: OVRKLL.com V2 is online!</h1>
<br>Finally, the second edition of my homepage is online!
<br>The last one was quite retro so I though of this concept as a stylish change to the layout and theme.
<br>
<br><h1>Introduction</h1>
<br>Hello and welcome to OVRKLL.com, my official online portfolio!<div class="details">Page edited on December 31, 23:04:27 UTC</div></div>

Foruden de manglende sletninger af linjeskift undrer det mig også, at der kommer skift i kildekoden - disse skulle jo netop erstattes med br-tags!

Skrevet fre. d. 26. december 2008 kl. 00:36:56| #16

coderdk
coderdk (160.399 point)
Prøv at lave

  "n2" => "#\n#"

om til

  "n2" => "#\r?\n#"

jeg er ikke helt med på, hvad du ellers mener? Er der for mange? Så prøv:

  "n2" => "#(\r?\n)+#"

Skrevet fre. d. 26. december 2008 kl. 01:03:36| #17

hf2ke
hf2ke (5.637 point)
Nu anvender jeg
"n2" => "#(((\r)?\n)+)#"
Det virker heller ikke.

Skrevet fre. d. 26. december 2008 kl. 02:25:49| #18

coderdk
coderdk (160.399 point)
Hmm jeg er nok nødt til at se inputteksten og hvad du vil have den til at blive til ;P

Skrevet fre. d. 26. december 2008 kl. 10:14:34| #19

hf2ke
hf2ke (5.637 point)
Okaj, så laver jeg et eksempel...

Input (fra tekstfelt til database og senere fortolket til output, når brugeren besøger siden):

A
B

C<div>D
E</div>F
<div>
G
</div>
H

Svarende til:

A\nB\n\nC<div>D\nE</div>F\n<div>\nG\n</div>\nH

Output:

A<br>B<br><br>C<div>D<br>E</div>F<div>G</div>H

Men så vidt jeg kan se, bliver outputtet mere noget i den her stil:

A\n<br>B\n<br>\n<br>C<div>D\n<br>E</div>F\n<br><div>\n<br>G\n<br></div>\n<br>H

Skrevet fre. d. 26. december 2008 kl. 10:17:24| #20

hf2ke
hf2ke (5.637 point)
Og så har jeg lige opdateret koden lidt:

"n1" => "#((((\r)?\n)|(<br>))*?)<div(.*?)>((((\r)?\n)|(<br>))*?)(.*?)((((\r)?\n)|(<br>))*?)</div>((((\r)?\n)|(<br>))*?)#",
"n2" => "#(((\r)?\n)+)#"

"n1" => "<div$1>$2</div>",
"n2" => "<br>"

Skrevet lør. d. 27. december 2008 kl. 23:14:10| #21

hf2ke
hf2ke (5.637 point)
Damn, ingen hjælp? :(

Skrevet lør. d. 27. december 2008 kl. 23:21:38| #22

coderdk
coderdk (160.399 point)
Prøv at tilføje "s" til dine switches, altså #s

Skrevet søn. d. 28. december 2008 kl. 00:30:29| #23

hf2ke
hf2ke (5.637 point)
Den forstod jeg ikke. Eksempel, tak :)

Skrevet søn. d. 28. december 2008 kl. 01:00:15| #24

coderdk
coderdk (160.399 point)
"n1" => "#(((\n)|(<br>))*?)<div(.*?)>(.*?)</div>(((\n)|(<br>))*?)#",
            "n2" => "#\n#"

bliver til

            "n1" => "#(((\n)|(<br>))*?)<div(.*?)>(.*?)</div>(((\n)|(<br>))*?)#s",
            "n2" => "#\n#s"

Skrevet søn. d. 28. december 2008 kl. 11:36:18| #25

hf2ke
hf2ke (5.637 point)
Nå. Eksperten besluttede sig lige for igen at slette alt, hvad jeg havde skrevet. Tak for lort.
Anyway, here goes:

Jeg har lavet et par ændringer (s virkede ikke). Se her:

"n1" => "#\r?\n#",
"n2" => "#(<br>)*<div(.+?)>(<br>)*(.)+?(<br>)*</div>(<br>)*#",
"n3" => "#(<br>)*<h1>(<br>)*(.)+?(<br>)*</h1>(<br>)*#",
"n4" => "#(<br>)*<h2>(<br>)*(.)+?(<br>)*</h2>(<br>)*#",
"n5" => "#(<br>)*<h3>(<br>)*(.)+?(<br>)*</h3>(<br>)*#"

"n1" => "<br>",
"n2" => "<div>Div</div>",
"n3" => "<h1>H1</h1>",
"n4" => "<h2>H2</h2>",
"n5" => "<h3>H3</h3>"

Altså inkluderet headlines og sat ændring af linjeskrift til break-tags øvers - men det virker stadig ikke. Se www.ovrkll.com/development .

Hvad pokker?

Skrevet søn. d. 28. december 2008 kl. 11:38:52| #26

hf2ke
hf2ke (5.637 point)
Den oprindelige tekst er:

News: OVRKLL.com V2 is online!


Finally, the second edition of my homepage is online!
The last one was quite retro so I though of this concept as a stylish change to the layout and theme.

Introduction


Hello and welcome to OVRKLL.com, my official online portfolio!
<div>
Test
</div>
Endtest


Det skulle gerne blive til:

<h1>H1</h1>Finally, the second edition of my homepage is online!<br>The last one was quite retro so I though of this concept as a stylish change to the layout and theme.<h1>H1</h1>Hello and welcome to OVRKLL.com, my official online portfolio!<div>Div</div>Endtest

Skrevet man. d. 29. december 2008 kl. 16:25:42| #27

hf2ke
hf2ke (5.637 point)
Okay, jeg tror jeg ved, hvad problemet er... Greediness/lazyness igen.
Er der ikke en mellemting? Jeg har behov for at matche så mange karakterer som muligt, indtil næste del af udtrykket findes første gang. Se eksemplet herunder.

Streng
XXXYYXXX

Greedyness (.*Z*)
$1 = XXXXXXX

Laziness (.*?Z*)
$1 = X
$2 = YY

Hvad jeg har brug for
$1 = XXX
$2 = YY

Skrevet man. d. 29. december 2008 kl. 16:26:12| #28

hf2ke
hf2ke (5.637 point)
Rettelse:

Streng
XXXYYXXX

Greedyness (.*Y*)
$1 = XXXXXXX

Laziness (.*?Y*)
$1 = X
$2 = YY

Hvad jeg har brug for
$1 = XXX
$2 = YY

Skrevet man. d. 29. december 2008 kl. 21:20:44| #29

coderdk
coderdk (160.399 point)
(.+?)(Y+)

måske?

Skrevet man. d. 29. december 2008 kl. 22:43:26| #30

hf2ke
hf2ke (5.637 point)
Nej, for det forudsætter jo, at Y findes.

Skrevet tir. d. 30. december 2008 kl. 01:12:35| #31

coderdk
coderdk (160.399 point)
Erh, er det ikke meningen? Hvad vil du?

Skrevet tir. d. 30. december 2008 kl. 10:34:07| #32

hf2ke
hf2ke (5.637 point)
Okaj, så skriver jeg eksemplet.

(<br>*)<div( .€)?>(<br>*).€(<br>*)</div>(<br>*)

Hvor € betyder, at strengen skal fanges så mange gange som muligt, indtil den næste går op første gang.

Skrevet tir. d. 30. december 2008 kl. 10:40:25| #33

coderdk
coderdk (160.399 point)
(<br>*) betyder noget andet end du tror, tror jeg ;)

Den vil matche <br>>>>>>>>>> og <br og <br>>>

* betyder 0 eller flere af foregående ? kan både slå greediness fra og fortælle, at det er en "optional" gruppe, i.e.

(<br>)? betyder at <br> kan være der, men ikke nødvendigvis...

Skrevet tir. d. 30. december 2008 kl. 11:54:04| #34

hf2ke
hf2ke (5.637 point)
Okaj,

(<br>)*<div( .€)?>(<br>)*.€(<br>)*</div>(<br>)*

Men hvis jeg skriver

(<br>)*<div( .*?)?>(<br>)*.*?(<br>)*</div>(<br>)*

Virker det ikke. Lige et sekund.

Skrevet tir. d. 30. december 2008 kl. 11:59:22| #35

hf2ke
hf2ke (5.637 point)
Her:

portfolio!
<div>
Test
</div>
Endtest

Altså:

portfolio!\n<div>\nTest\n</div>\nEndtest

Bliver desværre til:

portfolio!<div><br></div>Endtest

Med:

"n2" => "#(<br>)*<div( .*?)?>(<br>)*.*?(<br>)*</div>(<br>)*#"

"n2" => "<div$2>$4</div>"

Skrevet søn. d. 04. januar 2009 kl. 13:19:54| #36

hf2ke
hf2ke (5.637 point)
Ingen svar? :S
Jeg skal bare bruge en operator, der tager så mange tegn som muligt uden at være greedy.

Skrevet søn. d. 04. januar 2009 kl. 13:49:05| #37

hf2ke
hf2ke (5.637 point)
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGH!!!!!!!!!!!!!!!
Igen har Eksperten besluttet sig for at slette min kommentar!


---


Det lader til, at problemet er, at RegEx nægter at huske hele indholdet af div-tagget.


"n2" => "#(<br>)*<div( .*?)?>.*?</div>(<br>)*#"

"n2" => "<div$2>$3</div>"


"BODY1<br><div class=\"cakish\"><br>DIV1<br>DIV2<br></div><br>BODY2"

BODY1<div class="cakish"><br></div>BODY2

Men det burde være:

BODY1<div class="cakish"><br>DIV1<br>DIV2<br></div>BODY2



"<br>DIV1<br>DIV2<br>"

bliver kun

"<br>"

!


Hvad pokker?!

Skrevet man. d. 05. januar 2009 kl. 09:11:07| #38

coderdk
coderdk (160.399 point)
Den er ikke i en gruppe? Prøv at ændre

"n2" => "#(<br>)*<div( .*?)?>.*?</div>(<br>)*#"

til

"n2" => "#(<br>)*<div( .*?)?>(.*?)</div>(<br>)*#"

Skrevet tir. d. 06. januar 2009 kl. 08:56:45| #39

hf2ke
hf2ke (5.637 point)
Ser man det... Skidtet virker nu (sådan da). Skal værdier til udhentning altid være grupperet?

Skrevet tir. d. 06. januar 2009 kl. 09:38:18| #40

coderdk
coderdk (160.399 point)
Ja, med mindre du skal bruge det hele ($0) :)

Skrevet tir. d. 06. januar 2009 kl. 10:24:19| #41

hf2ke
hf2ke (5.637 point)
Så $0 returnerer hele den matchede streng?

Skrevet tir. d. 06. januar 2009 kl. 10:41:52| #42


Skrevet tir. d. 06. januar 2009 kl. 12:59:26| #43

hf2ke
hf2ke (5.637 point)
Jeg roder lige lidt videre selv... Det er vist ikke fair at trække accepten af dit svar længere ud :)

Skrevet tir. d. 06. januar 2009 kl. 13:33:14| #44


Skrevet tir. d. 06. januar 2009 kl. 17:56:35| #45

hf2ke
hf2ke (5.637 point)
HAH!
At værdier til udhentning skal være grupperede gjorde sgu den endelige forskel; med lidt tweaks kom jeg frem til følgende:

"n1" => "#\r?\n#",
"n2" => "#(<br>)*<div( .*?)?>(<br>)*(.*?)(<br>)*</div>(<br>)*#"

"n1" => "<br>",
"n2" => "<div$2>$4</div>"

Og det virker sgu! Mange tak for hjælpen :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Brugerliste med link til profil

Oprettet den 26. maj 2012 kl. 14.29
sayn giver 30 point for svar | Giv et svar »

php curl driller

Oprettet den 26. maj 2012 kl. 08.31
PHPnQrd giver 200 point for svar | Giv et svar »

Array i array

Oprettet den 25. maj 2012 kl. 08.32
sebster giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger