2010-10-21 156 views
7

我有一個字符串,看起來像這樣:刪除字符串後的字符?

John Miller-Doe - Name: jdoe 
Jane Smith - Name: jsmith 
Peter Piper - Name: ppiper 
Bob Mackey-O'Donnell - Name: bmackeyodonnell 

我想第二個連字符後刪除一切,讓我留下了:

John Miller-Doe 
Jane Smith 
Peter Piper 
Bob Mackey-O'Donnell 

所以,基本上,我我試圖找到一種方法在「 - 名稱:」之前將它切斷。我一直在玩substr和preg_replace,但我似乎無法得到我期待的結果...有人可以幫忙嗎?

+0

纔會有'約翰·米勒 - 伊 - 名稱:' ?最後總是會有'Name:'? – 2010-10-21 21:00:34

+0

你可能會發現['s($ str) - > beforeLast(' - ')'](https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L399)如[獨立庫](https://github.com/delight-im/PHP-Str)中所示。 – caw 2016-07-27 03:39:59

回答

19

假設字符串將始終具有這種格式,一種可能性是:

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

參考:substrstrpos

1
$string="Bob Mackey-O'Donnell - Name: bmackeyodonnell"; 
$parts=explode("- Name:",$string); 
$name=$parts[0]; 

雖然之後我的解決辦法是好多了...

2

然後,在第二個連字符之前的所有內容都正確嗎?一種方法是

$string="Bob Mackey-O'Donnell - Name: bmackeyodonnel"; 
$remove=strrchr($string,'-'); 
//remove is now "- Name: bmackeyodonnell" 
$string=str_replace(" $remove","",$string); 
//note $remove is in quotes with a space before it, to get the space, too 
//$string is now "Bob Mackey-O'Donnell" 

只是想我會拋出那裏作爲一個奇怪的選擇。

+0

感謝分享伴侶。我喜歡這種方式,它適用於我! – 2013-10-10 04:18:56

7

使用preg_replace()與模式/ - Name:.*/

<?php 
$text = "John Miller-Doe - Name: jdoe 
Jane Smith - Name: jsmith 
Peter Piper - Name: ppiper 
Bob Mackey-O'Donnell - Name: bmackeyodonnell"; 

$result = preg_replace("/ - Name:.*/", "", $text); 
echo "result: {$result}\n"; 
?> 

輸出:

result: John Miller-Doe 
Jane Smith 
Peter Piper 
Bob Mackey-O'Donnell 
+0

非常感謝,這個答案可以用於任何字符串。 – 2014-05-15 13:50:30

0

一個更清潔的方式:

$find = 'Name'; 
$fullString = 'aoisdjaoisjdoisjdNameoiasjdoijdsf'; 
$output = strstr($fullString, $find, true) . $find ?: $fullString;