webForumDet fria alternativet

Hitta alla matchande substrängar

PHP

4 svar · 271 visningar · startad av spango

Medlem sedan juni 20008 205 inlägg
Frågan#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?

------------------
Crying tears of lead
spangoman - back from the dead!

[Redigerat av spango den 03 feb 2001]

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);

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 03 feb 2001]

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\"\']+|

------------------
Crying tears of lead
spangoman - back from the dead!

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>";
}

------------------
Robban < robban@lipogram.com >

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.

------------------
Crying tears of lead
spangoman - back from the dead!

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)