2010-01-12 19 views
12

Ich möchte "Schlüsselwörter" innerhalb einer großen Zeichenfolge verwenden. Diese Schlüsselwörter beginnen und enden unter Verwendung von my_keyword und sind benutzerdefiniert. Wie kann ich innerhalb einer großen Zeichenfolge suchen und finden, was zwischen den beiden * Zeichen ist und jede Instanz zurückgeben?PHP: Return String zwischen zwei Zeichen

Der Grund, warum es ändern kann, dass Teile der Schlüsselwörter benutzerdefiniert sein können, wie page_date_Y, die das Jahr anzeigen können, in dem die Seite erstellt wurde.

Also, noch einmal, ich muss nur eine Suche durchführen und zurückgeben, was zwischen diesen * Zeichen ist. Ist das möglich, oder gibt es einen besseren Weg dies zu tun, wenn ich nicht die Länge des "Schlüsselwortes" kenne oder was ich sein könnte?

+0

fand ich eine super schöne Funktion, die genau das, was tut ich will, aber ich alle gefundenen Schlüsselwörter in ein Array setzen wollen. http://www.justin-cook.com/wp/2006/03/31/php-parse-a-string-between-two-strings/ Hat jemand Tipps, wie ich dieses Skript ändern könnte? –

+0

Ich hoffe, dass der Benutzer kein Schlüsselwort mit einem * darin definieren kann;) – zombat

+0

Ich benutze die Funktion in der obigen Verbindung, die du mir gegeben hast und es funktioniert gut für mich .... – Avinash

Antwort

42
<?php 
// keywords are between * 
$str = "PHP is the *best*, its the *most popular* and *I* love it.";  
if(preg_match_all('/\*(.*?)\*/',$str,$match)) {    
     var_dump($match[1]);    
} 
?> 

Ausgang:

array(3) { 
    [0]=> 
    string(4) "best" 
    [1]=> 
    string(12) "most popular" 
    [2]=> 
    string(1) "I" 
} 
+3

Brilliant! Und so einfach. Vielen Dank! –

+1

einfache, aber starke Antwort ... Prost! – VKGS

0

Hier ya go:

function stringBetween($string, $keyword) 
{ 
    $matches = array(); 
    $keyword = preg_quote($keyword, '~'); 

    if (preg_match_all('~' . $keyword . '(.*?)' . $keyword . '~s', $string, $matches) > 0) 
    { 
     return $matches[1]; 
    } 

    else 
    { 
     return 'No matches found!'; 
    } 
} 

Verwenden Sie die Funktion wie folgt aus:

stringBetween('1 *a* 2 3 *a* *a* 5 *a*', '*a*'); 
3

Explode auf "*"

$str = "PHP is the *best*, *its* the *most popular* and *I* love it."; 
$s = explode("*",$str); 
for($i=1;$i<=count($s)-1;$i+=2){ 
    print $s[$i]."\n";  
} 

Ausgang

$ php test.php 
best 
its 
most popular 
I