web-dev-qa-db-ja.com

文字列内の2文字間の部分文字列を抽出しますPHP

文字列内の2つの異なる文字間のフレーズを抽出できるphp関数はありますか? substr()のようなもの;

例:

$String = [modid=256];

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

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

副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example $idは256

助けていただければ幸いです:)

38
Sebastian

このコードを使用

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

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

61
Yogesh Suthar

つかいます:

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

?>
23
Salim
$String = "[modid=256]";

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

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

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

正規表現を使用したくない場合は、 strstrtrim 、および strrev 関数を使用します。

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

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

正規表現はあなたの友達です。

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/991

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

echo $matches['modId'];
1
Prasanth Bendra

(ここでは書式設定が簡単であるため、コメントから移動しました)

怠zyなアプローチかもしれませんが、そのような場合は通常、最初に次のように文字列を爆発させます:

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

そして、2番目のステップでは、おそらく「]」をrtrimを通して取り除きます:

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

...しかし、これはのみ構造が常にまったく同じ場合に機能します...

-乾杯-

ps:実際には$ String = "[modid = 256]";であってはなりませんか?

0
tillinberlin

正規表現を試す

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

出力

配列([0] => 256)

[〜#〜] demo [〜#〜]

説明ここでは、正規表現で(?<=)の後ろのポジティブルックを使用しています。 )「=」記号の直後の(\ d +)に一致します。\d数字(0〜9)に一致します。 + 1つ以上の先行トークンに一致

0
Reshil