2010-02-03 130 views
2

我試圖用/焦炭開始從一個字符串刪除一切,所以如果我有用正則表達式刪除字符串的結尾部分

my_value/j/im<b*+èo[/h>e\ylo 

我想刪除該字符串/j/im<b*+èo[/h>e\ylo只有返回my_value。 我想用str_replace,但我不是一個偉大的正則表達式程序員,我正在用PHP練習。

function clean_value ($value) { 
    return preg_replace ("^(/.*?)$", "", $value); 
} 

我該怎麼辦?

回答

5

這裏沒有理由使用正則表達式。使用的strpos()substr(),而不是一個組合:

$original = 'my_value/j/im<b*+èo[/h>e\ylo'; 

$removed = substr($original, 0, strpos($original, '/')); 

以上將工作,如果你能保證該字符串將永遠在它至少1個/字符。如果你不能保證或不知道,只需修改爲:

$removed = (strpos($original, '/') === false) 
      ? $original 
      : substr($original, 0, strpos($original, '/')); 
+0

如果沒有'/','strpos'將返回* false *,'substr'將返回一個空字符串。 – Gumbo 2010-02-03 17:56:15

+0

+爲簡單起見。 preg是一種浪費,正如爆炸成陣列一樣。 – hobodave 2010-02-03 17:56:42

+0

@Gumbo - 我只是想......更新 – 2010-02-03 17:59:07

2

您在正則表達式中忘記了delimiters。並且^/要求字符串以/開頭。

試試這個:

preg_replace("~/.*~", "", $value) 

這將從第一/刪除任何東西到最後。

+0

任何建議如何從_last_'/'移除到最後? – geotheory 2014-12-01 19:49:20

+0

@geotheory試試'/ [^ /] * $'。 – Gumbo 2014-12-01 19:58:51

+0

Tx。 (),str.split(「/」)。length-1).join('/')。concat(「/」) ' – geotheory 2014-12-01 20:09:49

2

你需要從你的正則表達式中刪除開始插入符號,你可以用一個貪婪的匹配來獲取字符串的其餘部分:

function clean_value ($value) { 
    return preg_replace ("/\/.*/", "", $value); 
} 
+0

對不起,我也忘了分隔符......:S固定。 – 2010-02-03 17:53:55

3

最簡單的事情都沒有正則表達式來完成

$string = "my_value/j/im<b*+èo[/h>e\ylo"; 
$splitted = explode("/",$string,2); 
echo "$splitted[0]\n"; 
相關問題