簡體   English   中英

提取字符串PHP中兩個字符之間的子字符串

[英]Extract a substring between two characters in a string PHP

是否有一個 PHP 函數可以提取字符串中 2 個不同字符之間的短語? substr()類的東西;

例子:

$String = "[modid=256]";

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

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

因此$id將是256

任何幫助,將不勝感激 :)

使用此代碼

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

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

采用:

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

如果您不想使用 reqular 表達式,請使用strstrtrimstrrev函數:

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

這將匹配任何數字,對於其他值,您必須對其進行調整。

您可以使用正則表達式:

<?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

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

echo $matches['modId'];

(從評論中移出,因為這里的格式更容易)

可能是一種懶惰的方法,但在這種情況下,我通常會首先像這樣分解我的字符串:

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

在第二步中,我可能會通過 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 )

演示

解釋這里它使用了正則表達式中 (?<=) 后面的 Positive Look,例如 (?<=foo)bar 在 foo 前面匹配 bar,這里 (?<=(=))(\\d+) 我們匹配 (\\d+ ) 就在 '=' 符號之后。 \\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。 最好的方法是使用正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM