2013-02-15 183 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)); 
} 

?> 
相关问题