Toon posts:

[php-pregexp]Wat is hier vaudt aan?

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Zie titel...
PHP:
1
2
3
4
5
6
7
<?
while (preg_replace("|\\[quote\](.*)\\[/quote\]|", $quotje))
 {
if ($num_q > 2)
{$quotje=preg_replace("|\\[quote\](.*)\\[/quote\]|", "[quote\]\\[..\]\\[/quote\]",$quotje);}
$num_q++;}
?>

de bedoeling van dit stukkie script is dus dat wanneer hij meer dan 2 [ quote ] 's tegen komt hij de teveel [ quote ] 's vervangt door [..]

edit:typo

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
PHP:
1
2
3
4
5
6
7
<?
while (preg_replace("|\\[quote\](.*)\\[/quote\]|is", $quotje))
 {
if ($num_q > 2)
{$quotje=preg_replace("|\\[quote\](.*)\\[/quote\]|is", "[quote\]\\[..\]\\[/quote\]",$quotje);}
$num_q++;}
?>

zowiets??

Verwijderd

Topicstarter
Warning: Wrong parameter count for preg_replace()

dat geeft ie bij deze regel
PHP:
1
2
3
<?
while (preg_replace("|\\[quote\](.*)\\[/quote\]|", $quotje))
?>

Het is dus zo dat ie te weinig parameters heeft, maar bij mijn weten is dit gewoon de manier om te controleren of het er is en zoja de while lus uit te voeren, jah toch?

Maar hij mist dus de parameter waarin hij verandert moet worden. Maar bij mijn weten (zie alinea erboven) kan dat dus.

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
het moet dus geen preg_replace zijn, maar preg_match ofzo..

kijk ff in de manual van http://www.php.net

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$b_begin="[b]";
$b_einde="[/b]";

$tijd=date("H:i", $quote_timestamp);
$datum=date("j-n-Y", $quote_timestamp);

$quote_begin="[quote]";
$quote_einde="[/quote]";
$puntjes="[..]";
$quotje="$b_begin$quote_usr schreef om $tijd op $datum het volgende:$b_einde\n$quote_begin$quotje$quote_einde\n";

if (preg_match("|\\[quote\](.*)\\[/quote\](.*)\\[quote\](.*)\\[/quote\]|is", $quotje)) 
{
$quotje=preg_replace("|\\[quote\](.*)\\[/quote\](.*)\\[quote\](.*)\\[/quote\]|is", "$quote_begin \\1 $quote_einde \\2 $quote_begin$puntjes$quote_einde",$quotje);
}
?>

ik kreeg met dat vorige een oneindige loop, logisch ook, achteraf bekeken.

ik heb nu dit geprobeerd maar nu voldoet niets meer aan de eis. :?

wie kan me helpen?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
de [] dingen escapen??

Verwijderd

dannydude: De bedoeling is dus dat wanneer hij meer dan 2 [ quote ] 's tegen komt hij de teveel [ quote ] 's vervangt door [..].
PHP:
1
2
3
4
5
6
7
8
9
<?
// Another useless hack by Arien@gathering.weakers.net
$seen = 0;
$quote = preg_replace(
    "!\\[quote\](.*?)\\[/quote\]!eis",
    "\$seen++ < 2 ? '\\1': '[..]'",
    $quote
);
?>

Enjoy.

Verwijderd

Topicstarter
dankjewel, maar ehh, hij werkt niet.
PHP:
1
2
3
<?
$quote = preg_replace(    "!\\[quote\](.*?)\\[/quote\]!eis",    "\$seen++ < 2 ? '\\1': '[..]'",    $quote);
?>

klopt deze regel wel? want in het tweede stukje begin ie wel met een \ maar eindigt hij er niet mee, dat klopt toch niet, of wel, want nu is het net een ge-escapede $.

Verwijderd

dannydude: Hij werkt niet.

Omschrijf werkt niet. Hij vervangt de eerste twee [quote] tags en hun eventuele inhoud door hun inhoud en vervolgens vervangt hij alle andere door [..].
PHP:
1
2
3
4
5
6
<?
$quote = preg_replace(
    "!\\[quote\](.*?)\\[/quote\]!eis",
    "\$seen++ < 2 ? '\\1': '[..]'",
    $quote);
?>

Klopt deze regel wel? Want nu is het net een ge-escapede $.

Dat klopt want het moet ook een escaped $ zijn. Die string is de code die uitgevoerd moet worden als er een match is en de resultaat string is waardoor de match vervangen moet worden.

Dus je kunt het lezen als
PHP:
1
2
3
4
5
6
7
8
9
<?
$seen++;
if($seen < 2) {
    // vervang door wat er tussen tags stond
    // (dus de waarde van "\\1")
} else {
    // vervang door "[..]"
}
?>

Dus, nogmaals: omschrijf "werkt niet".

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

* Janoz zat hier ff naar tij kijken en vroeg zich af wat deze expressies doet met berichten als deze...
Dit is een quote
en
dit is nog een quote, maar ze zijn niet genest
Hier zal waarschijnliujk de 2e quote worden omgezet naar [...] terwijl dit niet nodig is.......

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Voorbeeldje dan maar...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$quote =
"Voor de eerste quote [quote](Dit is de
eerste quote.)[/quote] voor de tweede
quote [quote](en dit is de tweede
quote)[/quote] en voor de 3de quote [quote]dit is quote 3[/quote]
en nog een 4de quote [quote]quote 4[/quote]
etc ....";

echo $quote ."\n\n";

$seen = 0;
$quote = preg_replace(
    "!\\[quote\](.*?)\\[/quote\]!eis",
    "\$seen++ < 2 ? '\\1': '[..]'",
    $quote
);

echo $quote;
?>

Output (quotes tussen haakjes voor leesbaarheid in gestripte versie, verder niets met quotes te maken):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Voor de eerste quote [quote](Dit is de
eerste quote.)[/quote] voor de tweede
quote [quote](en dit is de tweede
quote)[/quote] en voor de 3de quote [quote]dit is quote 3[/quote]
en nog een 4de quote [quote]quote 4[/quote]
etc ....

Voor de eerste quote (Dit is de
eerste quote.) voor de tweede
quote (en dit is de tweede
quote) en voor de 3de quote [..]
en nog een 4de quote [..]
etc ....

Verwijderd

Topicstarter
Oké bedankt! Hij werkt nu wel!

Verwijderd

dannydude: Hij werkt nu wel!

Ik heb hem niet veranderd ofzo... :? :P

Verwijderd

vaudt moet fout worden :7
Pagina: 1