2017-05-15 1 views
3

Ich habe einen Block von Text in PHP, und ich möchte in der Lage sein, alle Hashtags und Twitter-Namen daraus zu extrahieren, und drucken sie als eine neue Zeichenfolge.php alle Hashtags und Twitter-Namen aus einem Block Text extrahieren

Zum Beispiel:

$longstring = "blah blah blah #hashtag blah blah @twittername blah [email protected] blah blah #hashtag2 blah blah"; 

Und ich möchte eine neue Zeichenfolge erstellen:

$extracted = "#hashtag @twittername #hashtag2"; 

Jede Idee, wie ich dies leicht tun kann?

Ich bin mir nicht sicher, ob die Antwort eine Regex ist? Kann das beides zusammen machen und alle Mehrfachvorkommen beider Typen finden?

Antwort

3

preg_match_all Lösung:

$longstring = "blah blah blah #hashtag blah blah @twittername blah [email protected] blah blah #hashtag2 blah blah"; 
preg_match_all("/(?:^|\s)[#@][^ @#]+\b/", $longstring, $m); 
$extracted = implode("", $m[0]); 

print_r($extracted); 

Der Ausgang:

#hashtag @twittername #hashtag2 
3

Hoffe, das wird Ihnen helfen.

Regex demo

Regex:#[^\s]+|(?<=\s|^)@[^\[email protected]#]+

1.#[^\s]+ dies # passen und dann alle space bebauen entsprechen (ohne Leerzeichen)

2.| oder

3.(?<=\s|^)@[^\[email protected]#]+ Spiel @ und dann all außer space, @ und # mit positivem Blick hinter für space oder start of string

Hier stellen wir preg_match_all zum Sammeln von Übereinstimmungen verwenden und implode für sie als String verbinden.

Try this code snippet here

<?php 
ini_set('display_errors', 1); 
$string = "blah blah blah #hashtag blah blah @twittername blah [email protected] blah blah #hashtag2 blah blah"; 
preg_match_all("/#[^\s]+|(?<=\s|^)@[^\[email protected]#]+/", $string, $matches); 
print_r(implode(" ",$matches[0])); 

Output: #hashtag @twittername #hashtag2

3

Der folgende Code funktioniert für Sie: Hier teilen wir zuerst den Satz durch Leerzeichen.

Dann überprüfen wir, ob das Wort mit einem "@" oder "#" beginnt.

Wenn ja, dann fügen wir es an die neue Zeichenfolge an.

<?php 
function startsWith($haystack, $needle) 
{ 
    return strpos($haystack, $needle) === 0; 
} 
$longstring = "blah blah blah #hashtag blah blah @twittername blah [email protected] blah blah #hashtag2 blah blah"; 
$parts = explode(" ",$longstring); 
$newString = ""; 
foreach($parts as $part) 
{ 
    if(startsWith($part, "#") || startsWith($part, "@")) 
    { 
     $newString.= $part." "; 
    } 
} 

echo $newString;