文字列内の2つの異なる文字の間のフレーズを抽出できるPHP関数はありますか?のようなものsubstr()
;
例:
$String = "[modid=256]";
$First = "=";
$Second = "]";
$id = substr($string, $First, $Second);
したがって$id
、256
どんな助けもいただければ幸いです:)
このコードを使用する
$input = "[modid=256]";
preg_match('~=(.*?)]~', $input, $output);
echo $output[1]; // 256
使用する:
<?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));
}
?>
$String = "[modid=256]";
$First = "=";
$Second = "]";
$Firstpos=strpos($String, $First);
$Secondpos=strpos($String, $Second);
$id = substr($String , $Firstpos, $Secondpos);
正規表現はあなたの友達です。
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";
$str = "[modid=256]";
preg_match('/\[modid=(?P<modId>\d+)\]/', $str, $matches);
echo $matches['modId'];
(ここではフォーマットが簡単なため、コメントから移動しました)
怠惰なアプローチかもしれませんが、そのような場合、私は通常、最初に次のように文字列を爆発させます。
$string_array = explode("=",$String);
そして2番目のステップで私はおそらくrtrimを通してその"]"を取り除くでしょう:
$id = rtrim($string_array[1], "]");
...しかし、これは構造が常にまったく同じである場合にのみ機能します...
-乾杯-
ps:実際には$ String = "[modid =256]";であってはなりません。?
正規表現を試してください
$String =" [modid=256]";
$result=preg_match_all('/(?<=(=))(\d+)/',$String,$matches);
print_r($matches[0]);
出力
配列([0] => 256)
説明 ここでは、正規表現でポジティブルックビハインド(?<=)を使用しています。たとえば、(?<= foo)barは、前にfooが付いている場合、バーに一致します。 )「=」記号の直後。\ d任意の数字(0〜9)に一致します。+前のトークンの1つ以上に一致します
私はこれがあなたの文字列を取得する方法だと思います:
<?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;
?>
正規表現を使用するか、次のことを試すことができます。
$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について読む必要があります。このための最良の方法は正規表現です。