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

问题描述 投票:36回答:10

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

例:

$String = [modid=256];

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

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

因此,$id将是256

任何帮助,将不胜感激 :)

php sql substr
10个回答
59
投票

使用此代码

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

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


-1
投票

您可以使用正则表达式,也可以尝试:

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

你应该读一下substr。最好的方法是正则表达式。


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

?>

4
投票
$String = "[modid=256]";

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

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

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

3
投票

如果您不想使用正则表达式,请使用qazxsw poi,qazxsw poi和strstr函数:

trim

1
投票

正则表达是你的朋友。

strrev

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


1
投票

您可以使用正则表达式:

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

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

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";

0
投票

(从注释转移,因为格式化更容易)

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

http://eval.in/9913

在第二步,我会摆脱那个“]”也许通过rtrim:

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

echo $matches['modId'];

......但这只有在结构总是完全相同的情况下才有效...

-干杯-

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


0
投票

尝试正则表达式

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

产量

数组([0] => 256)

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

解释这里使用了正面表达式后面的正面看法(?<=),例如(?<= foo)bar匹配bar前面的foo,这里(?<=(=))(\ d +)我们匹配(\ d + )在'='之后。 \ d匹配任何数字字符(0-9)。 +匹配前面标记中的1个或多个

© www.soinside.com 2019 - 2024. All rights reserved.