[php] wyrażenie regularne, pominięcie wyników

0

Witam

Mam takiego przykladowego regexpa

$reg = "/-[^-]*-/";

i nastepujacy tekst:

$content = "-a-b-c-";

gdy robie preg_match_all() to wynikiem tej funkcji są 2 opcje -a- i -c-, jak zrobic zeby takze brane pod uwage bylo to -b-?

0

Dopasowanie literki 'a' kradnie literce 'b' kreskę po lewej.
Dlatego 'b' nie zostaje dopasowane.
'b' nie zostaje dopasowane, więc kreska stojąca na prawo od tej litery zostaje nietknięta, więc 'c' zostaje dopasowane.
(zauważ, że "-a--b--c-" zadziała)

Rozwiązanie to na przykład użycie przewidywania wstecz (?<=wyrażenie) i wprzód (?=wyrażenie) dla kresek. Przewidywanie nie łapie żadnych znaków, tylko "sprawdza warunek".

<?php

  $string = "-a-b-c-";
  
  preg_match_all( "#(?<=-)[^-]+(?=-)#", $string, $matches );
  print_r( $matches );
  
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1