2011-01-16 15 views

Odpowiedz

61

Nie potrzeba regex. Można użyć explode:

$str = array_shift(explode('-', $str)); 

lub substr i strpos:

$str = substr($str, 0, strpos($str, '-')); 

Może w połączeniu z trim usunąć początkowe i końcowe spacje.

Aktualizacja: Jako że @Mark wskazuje, że to się nie powiedzie, jeśli część, którą chcesz uzyskać, zawiera -. Wszystko zależy od możliwych danych wejściowych.

Więc zakładając, że chcesz usunąć wszystko po ostatniej kreską, można użyć strrpos, która znajduje ostatnie wystąpienie podciągu:

$str = substr($str, 0, strrpos($str, '-')); 

Więc widzisz, nie ma wyrażenie regularne potrzebne;)

+1

zawodzi nazw dwojaką: http://ideone.com/NiIA1 –

+0

@Mark Byers: Zależy, to nadal usuwa wszystko po '-' jak wymaga zapytania ;) Ale biorąc pod uwagę strukturę w pytaniu, można to rozwiązać przez eksplodowanie na '-' (spacja minus spacja). –

+3

+1 za naprawienie rozwiązania. :) –

6

można użyć strtok:

$x = strtok($x, '-'); 
+0

Niepowodzenie dla nazw podwójnie rozlutowanych: http://ideone.com/W4TNM –

9

Aby usunąć wszystko po pierwszy łącznik można użyć tego wyrażenia regularnego w kodzie:

"/-.*$/" 

Aby usunąć wszystko po ostatniej myślnikiem można użyć tego wyrażenia regularnego:

"/-[^-]*$/" 

http://ideone.com/gbLA9

Możesz również połączyć to z przycinaniem białych znaków od końca wyniku:

"/\s*-[^-]*$/" 
0

Mam nadzieję, że te wzorce pomoże =]

$pattern1='/.+(?=\s-)/'  //This will match the string before the " -"; 
$pattern2='/(?<=\s-\s).+/' //This will match the string after the "- "; 
0

eksplodować lub regexp są przesadą, spróbuj tego:

$str = substr($str, 0, strpos($str,'-'));

lub wersję strtok w jednej z odpowiedzi tutaj .

+1

Przerwy w nazwach z podwójnymi znakami: http://ideone.com/Ufu3h Zobacz tutaj, aby znaleźć działające rozwiązanie: http://stackoverflow.com/questions/4705167/how-to-remove-anything-in-a-string-after/4705179 # 4705179 –

4

Możesz również użyć.

strstr("John Chio - Guy", "-", true) . '-'; 

Trzeci parametr true mówi, że funkcja zwraca wszystko przed pierwszym wystąpieniem drugiego parametru.

Source on strstr() from php.net

+0

Czy Twoje rozwiązanie będzie bardziej wydajne niż użycie '$ str = substr ($ str, 0, strpos ($ str,' - ')); " jak podano w kilku powyższych odpowiedziach? Biorąc pod uwagę fakt, że nie używa on funkcji zagnieżdżonych, zakładam, że jest bardziej wydajny, ale niekoniecznie tak jest. Dowolny pomysł? –

-1

Użyj funkcji strstr.

Przykład:

$my_string = "This is my best string - You like it?"; 
$my_new_string = strstr($my_string, '-', true); 

echo($my_new_string); 
+0

To jednak działa na PHP 5.3+ –

+0

Jest to w zasadzie takie samo, jak odpowiedź udzielona przez user2453885, około 8 miesięcy wcześniej. –

Powiązane problemy