2012-03-26 175 views
0

我想返回字符串的某個部分。我看過substr,但我不相信這就是我要找的。返回部分字符串

使用此字符串:

/text-goes-here/more-text-here/even-more-text-here/possibly-more-here 

我怎麼能前兩個//text-goes-here

感謝之間返回的一切,

回答

4
$str="/text-goes-here/more-text-here/even-more-text-here/possibly-more-here"; 
$x=explode('/',$str); 
echo $x[1]; 
print_r($x);// to see all the string split by/
+0

糟糕,我以爲'explode'返回一個字符串,而不是一個數組。現在有道理!謝謝! – 2012-03-26 21:48:22

+0

mr manual說:「返回通過在由分隔符形成的邊界上分割字符串參數而創建的字符串數組。」 – 2012-03-26 21:50:01

+0

是的,沒有看過'explode'一段時間。再讀一遍。 :) – 2012-03-26 21:52:05

1
<?php 
$String = '/text-goes-here/more-text-here/even-more-text-here/possibly-more-here'; 

$SplitUrl = explode('/', $String); 

# First element 
echo $SplitUrl[1]; // text-goes-here 

# You can also use array_shift but need twice 
$Split = array_shift($SplitUrl); 
$Split = array_shift($SplitUrl); 

echo $Split; // text-goes-here 
?> 
0

的爆炸上面肯定的工作方法。第二個元素匹配的原因是,PHP在數組中插入空白元素,或者在沒有其他任何東西的情況下插入到分隔符中。另一種可能的解決方案是使用正則表達式:

<?php 
$str="/text-goes-here/more-text-here/even-more-text-here/possibly-more-here"; 

preg_match('#/(?P<match>[^/]+)/#', $str, $matches); 

echo $matches['match']; 

的(P <比賽> ...部分告訴它搭配了一個名爲捕獲組。如果你離開了在P <比賽>一部分,你呢? 「會最終在$匹配的部分匹配[1] $比賽[0]將包含與正向部分斜線,如 「/文本GOES-這裏/」

0

只需使用preg_match:。

preg_match('@/([^/]+)/@', $string, $match); 
$firstSegment = $match[1]; // "text-goes-here" 

其中

@ - start of regex (can be any caracter) 
/ - a litteral/
( - beginning of a capturing group 
[^/] - anything that isn't a litteral/
+ - one or more (more than one litteral /) 
) - end of capturing group 
/ - a litteral/
@ - end of regex (must match first character of the regex)