Hitta alla matchande substrängar

PHP

4 svar · 276 visningar · startad av spango

Medlem sedan juni 20008 205 inlägg
Trådstart#1

Finns det någon funktion som plockar ut alla delsträngar som matchar till exempel en regexp i en sträng? Vad jag vill göra är följande:

$text = "Alla barn gråter nu.";
$pattern = "/\S+/"; # Matcha ett eller flera icke-blanksteg
$ord = plocka_ut($text, $pattern);
/*
Nu vill jag att $ord ska vara en array som ser ut så här:
array("Alla", "barn", "gråter", "nu.")
*/

Jag har stirrat mig blind på sträng- och regexpfunktionerna, men jag kan tamefan inte hitta något som gör det jag vill. Har jag letat för slött, eller är det helt enkelt så att det inte finns någon funktion för detta?

Medlem sedan dec. 19992 555 inlägg
#2

Om du bara vill separera en sträng i olika ord så behöver du inte använda regexp. Går att göra med explode().

$text = "Alla barn gråter nu.";
$ord = explode (" ", $text);

Detta är snabbare än att använda reguljära uttryck. Om du vill gardera dig mot att fler än ett mellanslag separerar orden så kan du använda split() eller preg_split().

$text = "Alla barn     gråter nu";
$ord = preg_split("/\s+/",$text);
Medlem sedan juni 20008 205 inlägg
#3

Nu var det dessvärre inte så enkelt. Det här ska användas i en funktion som görlänkar av alla url:er i en text. Just nu har jag bara whitespace som avslutning av url:erna, men tyckte att det vore najs om >, " och ' kunde få vara det också. Mönstret jag skulle vilja plocka ut är väl typ |http://[^>\s\"\']+|

Medlem sedan dec. 19992 555 inlägg
#4

Ok, och du vill ha alla URL:er samlade in en array? Förstår jag dig rätt då?

Då kan du t.ex. använda preg_match_all().

Ett exempel.

$text = 'Alla [url="http://link1/"]http://link1/[/url]  barn "HTTP://link2/" \'http://link3/\' gråter <http://link4/> nu.';
preg_match_all ("&#0124;http://[^>\s\"\']+&#0124;is", $text, $ord);

Nu kommer $ord att vara en flerdimentionell array, och den "underarray" du vill ha tag på (som innehåller alla URL:er) finns i $ord[0].

Ett exempel som skriver ut alla URL:er.

while (list ($key, $val) = each ($ord[0])) {
     echo "$key => $val<br>";
}
Medlem sedan juni 20008 205 inlägg
#5

Toppen! Jag satt och fluktade på de där funktionerna, men jag fick aldrig nån rätsida på dem. Tack tack tack.

300 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
164 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)