提取字符串中两个字符之间的子字符串PHP
是否有可以提取字符串中两个不同字符之间的短语的php函数?像substr();提取字符串中两个字符之间的子字符串PHP
例子:
$String = [modid=256];
$First = "=";
$Second = "]";
$id = substr($string, $First, $Second);
因此$id
将256
任何帮助,将不胜感激:)
使用此代码
$input = "[modid=256]";
preg_match('~=(.*?)]~', $input, $output);
echo $output[1]; // 256
正则表达式是你的朋友。
preg_match("/=(\d+)\]/", $String, $matches);
var_dump($matches);
这将匹配任何数字,其他值,你将不得不适应它。
您可以使用正则表达式:
<?php
$string = "[modid=256][modid=345]";
preg_match_all("/\[modid=([0-9]+)\]/", $string, $matches);
$modids = $matches[1];
foreach($modids as $modid)
echo "$modid\n";
$String = "[modid=256]";
$First = "=";
$Second = "]";
$Firstpos=strpos($String, $First);
$Secondpos=strpos($String, $Second);
$id = substr($String , $Firstpos, $Secondpos);
$str = "[modid=256]";
preg_match('/\[modid=(?P<modId>\d+)\]/', $str, $matches);
echo $matches['modId'];
(从评论感动,因为格式化更容易在这里)
可能是一种偷懒的做法,但在这种情况下,我通常会先爆炸我的字符串是这样的:
$string_array = explode("=",$String);
,并在第二步我就会改掉的是“]”也许通过RTRIM:
$id = rtrim($string_array[1], "]");
...但是这仅工作,如果数据结构都完全相同......
-cheers-
PS:应该不会,它实际上是$字符串= “[modid = 256]”;?
尝试正则表达式
$String =" [modid=256]";
$result=preg_match_all('/(?<=(=))(\d+)/',$String,$matches);
print_r($matches[0]);
输出
阵列([0] => 256)
说明 这里它使用了正面看后面(? (?< =) 例如(?< = foo)bar前面有foo匹配条, here(?< =(=))(\ d +)我们匹配'='符号后面的(\ d +)。 \ d匹配任何数字字符(0-9)。 +匹配1个或更多的前述令牌
为什么你使用$ result变量? – 2016-05-26 05:44:13
您可以使用正则表达式,或者你可以试试这个的:
$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。最好的方式是正则表达式。
用途:
<?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));
}
?>
可以分为两个部分做到这一点:你首先得串从$ first开始,然后解析结果直到$ second字符。 – fedorqui 2013-02-15 09:37:22
你究竟想要捕捉什么? id,字符串,=? – djjjuk 2013-02-15 09:38:42
在这种情况下,我通常喜欢炸开我的字符串:explode(“=”,$ String);在第二步我会摆脱那个“]”也许通过rtrim($ string,“]”); – tillinberlin 2013-02-15 09:39:43