Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pregmatch
Forum PHP.pl > Forum > Przedszkole
preg_match
  1. $ile = preg_match_all('|(\d+)\-(\d+)|', $text, $matches);
  2. for ($i = 1; $i <= $ile; $i++)
  3. {
  4. preg_match('|(\d+)\-(\d+)|', $text, $matches);
  5. $number = $matches[1] - $matches[2];
  6. $text = str_replace($matches[0], $number, $text);
  7. }


Witam, mam skrypt który w stringu zamienia x-x, na x-x, czyli 5-2, na 3. A jak zrobić żeby brał też pod uwagę -x-x, próbuje dodać - z przodu, ale nic nie daje. :/
-k3dziu-
Sam się jeszcze uczę korzystać z wyrażeń regularnych, ale spróbował zapisać tak (wersja długa):

  1. $ile = preg_match_all('/\-(\d+)\-(\d+)|(\d+)\-(\d+)/', $text, $matches);

znak |pośrodku wyrażenia to LUB

a w wersji krótkiej to tak:

$ile = preg_match_all('|.(\d+)\-(\d+)|', $text, $matches);
znak . na początku oznacza dowolny znak (dowolny znaczy że dowolny, także litery i inne co może powodować błedy)
Gość
  1. $ile = preg_match_all('|.(\d+)\-(\d+)|', $text, $matches);
  2. for ($i = 1; $i <= $ile; $i++)
  3. {
  4. preg_match('|.(\d+)\-(\d+)|', $text, $matches);
  5. $number = $matches[1] - $matches[2];
  6. $text = str_replace($matches[0], $number, $text);
  7. }


Mam tak i dupa, -5-10, wychodzi -5, czyli nie czyta minusa. :/
vonski
Spróbuj tak:

  1. preg_match_all('/(-)?(\d+)-(\d+)/', $text, $matches, PREG_SET_ORDER);
  2.  
  3. foreach($matches as $submatches) {
  4. if($submatches[1] == '-') {
  5. $text = str_replace($submatches[0], -1 * $submatches[2] - $submatches[3], $text);
  6. } else {
  7. $text = str_replace($submatches[0], $submatches[2] - $submatches[3], $text);
  8. }
  9. }
preg_match
Dzięki! Super, działa. Ale dlaczego jak zamienie -, na +, to nie działa -x+x? :<
vonski
  1. preg_match_all('/(-?\d+)([\-\+])(\d+)/', $text, $matches, PREG_SET_ORDER);
  2.  
  3. foreach($matches as $submatch) {
  4. if($submatch[2] == '-') {
  5. $text = str_replace($submatch[0], $submatch[1] - $submatch[3], $text);
  6. } else {
  7. $text = str_replace($submatch[0], $submatch[1] + $submatch[3], $text);
  8. }
  9. }


Teraz powinno działać dla "+" i "-"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.