To jest przykład mojego ciągu.Jak usunąć cokolwiek z ciągu po "-"?
$x = "John Chio - Guy";
$y = "Kelly Chua - Woman";
Potrzebuję wzór dla reg wymienić.
$pattern = ??
$x = preg_replace($pattern, '', $x);
Dzięki
To jest przykład mojego ciągu.Jak usunąć cokolwiek z ciągu po "-"?
$x = "John Chio - Guy";
$y = "Kelly Chua - Woman";
Potrzebuję wzór dla reg wymienić.
$pattern = ??
$x = preg_replace($pattern, '', $x);
Dzięki
Nie potrzeba regex. Można użyć explode
:
$str = array_shift(explode('-', $str));
$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;)
można użyć strtok
:
$x = strtok($x, '-');
Niepowodzenie dla nazw podwójnie rozlutowanych: http://ideone.com/W4TNM –
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:
"/-[^-]*$/"
Możesz również połączyć to z przycinaniem białych znaków od końca wyniku:
"/\s*-[^-]*$/"
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 "- ";
eksplodować lub regexp są przesadą, spróbuj tego:
$str = substr($str, 0, strpos($str,'-'));
lub wersję strtok w jednej z odpowiedzi tutaj .
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 –
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.
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ł? –
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);
To jednak działa na PHP 5.3+ –
Jest to w zasadzie takie samo, jak odpowiedź udzielona przez user2453885, około 8 miesięcy wcześniej. –
zawodzi nazw dwojaką: http://ideone.com/NiIA1 –
@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). –
+1 za naprawienie rozwiązania. :) –