44

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

例:

$String = "[modid=256]";

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

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

したがって$id256

どんな助けもいただければ幸いです:)

4

11 に答える 11

68

このコードを使用する

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

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

于 2013-02-15T09:40:03.957 に答える
27

使用する:

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

?>
于 2013-09-08T05:52:47.730 に答える
4
$String = "[modid=256]";

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

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

$id = substr($String , $Firstpos, $Secondpos);
于 2013-02-15T09:41:52.870 に答える
3

reqular expresionを使用したくない場合は、strstr trim およびstrrev関数を使用してください。

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

// Any PHP version
$id = trim(strrev(strstr(strrev((strstr($String, '='))), ']')), '=]');
于 2013-02-15T11:09:18.870 に答える
2

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

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

これは任意の数に一致します。他の値については、それを適応させる必要があります。

于 2013-02-15T09:39:32.260 に答える
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

于 2013-02-15T09:41:40.553 に答える
1
$str = "[modid=256]";
preg_match('/\[modid=(?P<modId>\d+)\]/', $str, $matches);

echo $matches['modId'];
于 2013-02-15T09:42:09.300 に答える
0

(ここではフォーマットが簡単なため、コメントから移動しました)

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

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

そして2番目のステップで私はおそらくrtrimを通してその"]"を取り除くでしょう:

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

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

-乾杯-

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

于 2013-02-15T09:48:08.107 に答える
0

正規表現を試してください

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

出力

配列([0] => 256)

デモ

説明 ここでは、正規表現でポジティブルックビハインド(?<=)を使用しています。たとえば、(?<= foo)barは、前にfooが付いている場合、バーに一致します。 )「=」記号の直後。\ d任意の数字(0〜9)に一致します。+前のトークンの1つ以上に一致します

于 2013-02-15T09:48:51.047 に答える
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;
?>
于 2021-06-08T13:19:39.917 に答える
-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について読む必要があります。このための最良の方法は正規表現です。

于 2013-02-15T09:51:52.947 に答える