2013-02-15 244 views
26

是否有可以提取字符串中兩個不同字符之間的短語的php函數?像substr();提取字符串中兩個字符之間的子字符串PHP

例子:

$String = [modid=256]; 

$First = "="; 
$Second = "]"; 

$id = substr($string, $First, $Second); 

因此$id將256

任何幫助,將不勝感激:)

+1

可以分爲兩個部分做到這一點:你首先得串從$ first開始,然後解析結果直到$ second字符。 – fedorqui 2013-02-15 09:37:22

+0

你究竟想要捕捉什麼? id,字符串,=? – djjjuk 2013-02-15 09:38:42

+0

在這種情況下,我通常喜歡炸開我的字符串:explode(「=」,$ String);在第二步我會擺脫那個「]」也許通過rtrim($ string,「]」); – tillinberlin 2013-02-15 09:39:43

回答

1

正則表達式是你的朋友。

preg_match("/=(\d+)\]/", $String, $matches); 
var_dump($matches); 

這將匹配任何數字,其他值,你將不得不適應它。

1

您可以使用正則表達式:

<?php 
$string = "[modid=256][modid=345]"; 
preg_match_all("/\[modid=([0-9]+)\]/", $string, $matches); 

$modids = $matches[1]; 

foreach($modids as $modid) 
    echo "$modid\n"; 

http://eval.in/9913

2
$String = "[modid=256]"; 

$First = "="; 
$Second = "]"; 

$Firstpos=strpos($String, $First); 
$Secondpos=strpos($String, $Second); 

$id = substr($String , $Firstpos, $Secondpos); 
1
$str = "[modid=256]"; 
preg_match('/\[modid=(?P<modId>\d+)\]/', $str, $matches); 

echo $matches['modId']; 
0

(從評論感動,因爲格式化更容易在這裏)

可能是一種偷懶的做法,但在這種情況下,我通常會先爆炸我的字符串是這樣的:

$string_array = explode("=",$String); 

,並在第二步我就會改掉的是「]」也許通過RTRIM:

$id = rtrim($string_array[1], "]"); 

...但是這僅工作,如果數據結構都完全相同......

-cheers-

PS:應該不會,它實際上是$字符串= 「[modid = 256]」;

0

嘗試正則表達式

$String =" [modid=256]"; 
$result=preg_match_all('/(?<=(=))(\d+)/',$String,$matches); 
print_r($matches[0]); 

輸出

陣列([0] => 256)

DEMO

說明 這裏它使用了正面看後面(? (?< =) 例如(?< = foo)bar前面有foo匹配條, here(?< =(=))(\ d +)我們匹配'='符號後面的(\ d +)。 \ d匹配任何數字字符(0-9)。 +匹配1個或更多的前述令牌

+0

爲什麼你使用$ result變量? – 2016-05-26 05:44:13

-1

您可以使用正則表達式,或者你可以試試這個的:

$String = "[modid=256]"; 

$First = "="; 
$Second = "]"; 
$posFirst = strpos($String, $First); //Only return first match 
$posSecond = strpos($String, $Second); //Only return first match 

if($posFirst !== false && $posSecond !== false && $posFirst < $posSecond){ 
    $id = substr($string, $First, $Second); 
}else{ 
//Not match $First or $Second 
} 

你應該閱讀有關SUBSTR。最好的方式是正則表達式。

2

如果你不想使用reqular expresion,用strstrtrimstrrev功能:

// Require PHP 5.3 and higher 
$id = trim(strstr(strstr($String, '='), ']', true), '=]'); 

// Any PHP version 
$id = trim(strrev(strstr(strrev((strstr($String, '='))), ']')), '=]'); 
19

用途:

<?php 

$str = "[modid=256]"; 
$from = "="; 
$to = "]"; 

echo getStringBetween($str,$from,$to); 

function getStringBetween($str,$from,$to) 
{ 
    $sub = substr($str, strpos($str,$from)+strlen($from),strlen($str)); 
    return substr($sub,0,strpos($sub,$to)); 
} 

?> 
相關問題