• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzanie ilości spacji za pomocą wyrażeń regularnych

Object Storage Arubacloud
0 głosów
128 wizyt
pytanie zadane 24 kwietnia 2018 w PHP przez coderCpp93 Gaduła (4,200 p.)

Witam mam poniższy kod:

$ciag = "To jest jakieś zdanie";
	
	function ile_spacji($ciag)
	{
		$spacji = 0;
		$dlugosc = strlen($ciag);
		
		for ($i=0; $i<=$dlugosc; $i++)
		{
			if (preg_match("/\s/", $ciag))
			{
				$spacji++;
			}
		}
		
		echo ("W tym zdaniu jest $spacji spacji");
	}
	
	ile_spacji($ciag);

Program musi wypisać ilość spacji zamiast tego wypisuje "W tym zdaniu jest 23 spacji". Co jest źle?


Pozdrawiam

komentarz 24 kwietnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Masz wynik 23 ponieważ metoda preg_match interesuje się tylko pierwszym napotkanym dopasowaniem, więc ty wciąż dopasowujesz pierwszą spację niezależnie od tego jakie znaki są dalej. Użyj preg_match_all.

2 odpowiedzi

0 głosów
odpowiedź 24 kwietnia 2018 przez CzikaCarry Szeryf (75,340 p.)

A nie lepiej substr_count($ciag, ' '); ?

0 głosów
odpowiedź 24 kwietnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Przykładowe rozwiązanie z preg_match_all:

http://sandbox.onlinephpfunctions.com/code/6be0de9f9bdb1fbf4b94682ad784b76fd187bd0a

function count_spaces ($str) {
    $result = preg_match_all('/\x20/', $str);
    echo "W tym zdaniu jest $result spacji.";
}

i mała uwaga - piszesz o dopasowaniu spacji, a swoim regexp dopasowujesz również inne białe znaki. Ja dałem Ci przykład na dopasowanie wyłącznie spacji (czyli znaku o punkcie kodowym U+0020) - przeanalizuj jeszcze raz co dokładnie chcesz zliczać.

Metoda preg_match_all od razu obleci cały ciąg i zwróci ilość wszystkich znalezionych dopasowań.

Już bardzo dawno nie pracowałem w PHP więc nie dam sobie ręki uciąć czy ten kod jest zgodny z obecnymi zasadami pisania w PHP, tu niech się wypowiedzą osoby pracujące z tym na co dzień. Na szybko jednak tak właśnie bym ten problem rozwiązał.

Podobne pytania

0 głosów
1 odpowiedź 567 wizyt
pytanie zadane 31 stycznia 2018 w PHP przez Milesq Nałogowiec (32,020 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...