Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyszukiwanie w stringach
Forum PHP.pl > Forum > Przedszkole
php__amator
Witajcie Świątecznie,

Potrzebuję podpowiedzi, wyszukuję w stringu określonego ciągu znaków i tu nie ma problemu, potrzebuję jednak do tego określonego dodać kolejnych kilka ale już bez sprawdzania co to jest. Powiedzmy że mam ciąg: Z-0.00000000, wyszukuję znaki "Z-" i do tego kolejnych 10 znajdujących się z prawej strony.

Jak je połączyć albo jak z tych 2 elementów zrobić jeden.

Dlaczego ?
Dlatego, że liczby znajdujące się za Z- zmieniają się a nie są potrzebne więc trzeba je wyciąć.

Jak ?

Tak wyglądają kody
G00 Z0.10000000
G00 X4.95970000 Y2.74900000
G01 Z-0.25000000
G01 X4.95970000 Y3.99320000
G00 Z0.10000000
G00 X4.95970000 Y2.74900000
G01 Z-0.50000000
G01 X4.95970000 Y2.74900000 Z-0.50000000
G01 X4.95970000 Y3.99320000
G00 Z0.10000000
G00 X4.95970000 Y2.74900000
G01 Z-0.75000000
tak wyglądają kody i chcę wyciąć/podmienić automatycznie np:

G00 Z0.10000000 => M3

G01 Z-0.25000000 => M5
itd
Ponieważ zmieniają się wartości muszą być traktowane jedynie jako długość stringu a nie co w nim jest
Gdyby stringi były stałe problemu by nie było.

Ze świątecznym pozdrowieniem
phpamator
untorched
preg_replace powinno pomóc
php__amator
Własnie z tym walczę ale zastosowanie str_replace nie bardzo robi to o co proszę.
Ponieważ ma brać pod uwagę blok "G01 Z-0.75000000" ale .... tylko pierwszych 5 znaków jest stałe, kolejnych 10 się zmienia wiec przy wyszukiwaniu musi wybierac te 5 + następnych 10 znaków
untorched
Naucz się czytać i sprawdź co udostępniam! preg_replace a nie str_replace. Zasadnicza różnica!
php__amator
Umiem czytać,
  1. // wyszukiwanie stringu G00 Zx.xxxxxxxx
  2. $str = preg_replace('/G00 Z[a-zA-Z0-9.]{10}/',"M3", $code);
  3.  
  4. // wyszukiwanie string G01 Zx.xxxxxxxx
  5. $str = preg_replace('/G01 Z[a-zA-Z0-9.]{10}/',"M3", $code);
  6.  
  7. // wyszukiwanie stringu G00 Z-x.xxxxxxxx - bardzo wazne zeby rozpoznawalo znak - od tego zalezy czy to M3 czy M5
  8. $str = preg_replace('/G00 Z-[A-Za-z0-9.]{10}/',"M5", $code);
  9.  
  10. // wyszukiwanie string G01 Z-x.xxxxxxxx
  11. $str = preg_replace('/G01 Z-[A-Za-z0-9.]{10}/',"M5", $code);
  12.  
  13. // wyszukiwanie stringu Zx.xxxxxxxx
  14. $str = preg_replace('/Z[a-zA-Z0-9.]{10}/',"M3", $code);
  15.  
  16. // wyszukiwanie string Z-x.xxxxxxxx
  17. $str = preg_replace('/Z-[a-zA-Z0-9.]{10}/',"M5", $code);
  18.  

Zobacz cie, o ile teoretycznie każda z tych linii wyszukuje i zamienia odpowiednią sekwencję na "Mx" to .... i tak nie chce działać jak ja tego potrzebuję

bo to: G00 Z0.10000000 G01 Z-0.25000000
G00 Z0.10000000 G01 Z-0.50000000
Z-0.50000000
G00 Z0.10000000 G01 Z-0.75000000
Z-0.75000000
Z-0.25000000
G00 Z0.10000000 G01 Z-0.50000000
Z-0.50000000
powinno wyglądać tak:
M3 M5
M3 M5
M5
M3 M5
M5
M5
M3 M5
M5
a wygląda tak sad.gif

G00 Z0.10000000 G01 M5 G00 Z0.10000000 G01 M5 M5 G00 Z0.10000000 G01 M5 M5 M5 G00 Z0.10000000 G01 M5 M5
jackraymund
Gdyż, wynik jest ostatnim replac'em.
A wyszukiwarka nie wyświetla znaku entera, natomiast w znaczniku <pre> zobaczysz je. Ew. możesz zamienić je na <br> za pomocą funkcji nl2br.
  1. $str = preg_replace('/G00 Z[a-zA-Z0-9.]{10}/',"M3", $code);
  2.  
  3. // wyszukiwanie string G01 Zx.xxxxxxxx
  4. $str = preg_replace('/G01 Z[a-zA-Z0-9.]{10}/',"M3", $str);
  5.  
  6. // wyszukiwanie stringu G00 Z-x.xxxxxxxx - bardzo wazne zeby rozpoznawalo znak - od tego zalezy czy to M3 czy M5
  7. $str = preg_replace('/G00 Z-[A-Za-z0-9.]{10}/',"M5", $str);
  8.  
  9. // wyszukiwanie string G01 Z-x.xxxxxxxx
  10. $str = preg_replace('/G01 Z-[A-Za-z0-9.]{10}/',"M5", $str);
  11.  
  12. // wyszukiwanie stringu Zx.xxxxxxxx
  13. $str = preg_replace('/Z[a-zA-Z0-9.]{10}/',"M3", $str);
  14.  
  15. // wyszukiwanie string Z-x.xxxxxxxx
  16. $str = preg_replace('/Z-[a-zA-Z0-9.]{10}/',"M5", $str);
  17. echo '<pre>'; // lub $str = nl2br($str);
  18. echo($str);
php__amator
Jak więc go zmusić, żeby zrobił po kolei zmiany uzywając kazdego z pokazanych wariantów ?
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.