在字符串PHP中提取两个字符之间的子字符串

时间:2013-02-15 09:36:22

标签: php sql substr

是否有一个php函数可以提取字符串中两个不同字符之间的短语?像substr();

之类的东西

示例:

$String = [modid=256];

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

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

因此$id将为256

任何帮助将不胜感激:)

11 个答案:

答案 0 :(得分:59)

使用此代码

$input = "[modid=256]";
preg_match('~=(.*?)]~', $input, $output);
echo $output[1]; // 256

工作示例http://codepad.viper-7.com/0eD2ns

答案 1 :(得分:22)

使用:

<?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));
}

?>

答案 2 :(得分:4)

$String = "[modid=256]";

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

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

$id = substr($String , $Firstpos, $Secondpos);

答案 3 :(得分:3)

如果您不想使用正则表达式,请使用strstrtrimstrrev函数:

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

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

答案 4 :(得分:1)

正则表达式是你的朋友。

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

这将匹配任何数字,对于您将需要调整的其他值。

答案 5 :(得分: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

答案 6 :(得分:1)

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

echo $matches['modId'];

答案 7 :(得分:0)

(从评论中删除,因为格式化更容易)

可能是一种懒惰的方法,但在这种情况下,我通常会首先爆炸我的字符串:

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

并且在第二步中我可以通过rtrim摆脱那个“]”:

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

...但如果结构总是完全相同,这将 ...

-cheers -

ps:它不应该是 $ String =“[modid = 256]”;

答案 8 :(得分:0)

尝试正则表达式

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

<强>输出

数组([0] =&gt; 256)

<强> DEMO

<强>解释    在正则表达式中,它使用正面外观(?&lt; =)    例如(?&lt; = foo)bar在foo之前匹配bar,    这里(?&lt; =(=))(\ d +)我们匹配'='符号之后的(\ d +)。    \ d匹配任何数字字符(0-9)。    +匹配前面标记中的一个或多个

答案 9 :(得分:0)

我认为这是获取字符串的方法:

<?php
function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}


$fullstring = '.layout { 

color: {{ base_color }} 

}

li { 

color: {{ sub_color }} 

} 

.text { 

color: {{ txt_color }}

 }

 .btn { 

color: {{ btn_color }}

 }

.more_text{

color:{{more_color}}

}';

  $parsed = get_string_between($fullstring, '{{', '}}');
  echo $parsed;
?>

答案 10 :(得分:-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。最好的方法是正则表达式。