Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提取字符串中两个字符之间的子字符串_Php_Substr - Fatal编程技术网

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

Php 提取字符串中两个字符之间的子字符串,php,substr,Php,Substr,是否有PHP函数可以提取字符串中两个不同字符之间的短语?类似于substr() 例如: $String = "[modid=256]"; $First = "="; $Second = "]"; $id = substr($string, $First, $Second); 因此,$id将是256 任何帮助都将不胜感激:)正则表达式是您的朋友 preg_match("/=(\d+)\]/", $String, $matches); var_dump($matches); 这将匹配任何数字

是否有PHP函数可以提取字符串中两个不同字符之间的短语?类似于
substr()

例如:

$String = "[modid=256]";

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

$id = substr($string, $First, $Second);
因此,
$id
将是
256


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

正则表达式是您的朋友

preg_match("/=(\d+)\]/", $String, $matches);
var_dump($matches);
这将匹配任何数字,对于其他值,您必须调整它。

使用此代码

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

工作示例

您可以使用正则表达式:

<?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]”;
预匹配('/\[modid=(?P\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]);
$String=“[modid=256]”;

$result=preg_match_all('/(?您可以使用正则表达式,也可以尝试以下操作:

$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
}
$String=“[modid=256]”;
$First=“=”;
$Second=“]”;
$posFirst=strps($String,$First);//只返回第一个匹配项
$posSecond=strps($String,$Second);//只返回第一个匹配项
if($posFirst!==false&&$posSecond!==false&&&$posFirst<$posSecond){
$id=substr($string、$First、$Second);
}否则{
//不匹配$First或$Second
}

您应该阅读substr。最好的方法是使用正则表达式。

如果您不想使用reqular表达式、使用和函数:

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

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


我认为这是获取字符串的方法:

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


您可以分为两部分:首先从$first获取字符串,然后解析结果直到$second字符。您实际想要捕获什么?id、字符串、=?在这种情况下,我通常喜欢分解字符串:分解(“=”,$string);在第二步中,我可能会通过rtrim($string,”)去掉“]”;为什么使用$result变量?如果有人想知道:
$output
的原因索引
1
包含括号内模式匹配的文本,那么
$output[0]
就是模式匹配的全文。
$output[1]
是第一个子模式匹配的文本;
$output[2]
是与第二个子模式匹配的文本,依此类推。有关详细信息,请参阅。
substr
的第三个参数是
length
not ending position。如果运行此命令,您将看到
$id
等于“=256]”而不是“256”。如果不匹配,函数将返回FALSE。当
$string
中没有
=
]
时,请小心!
// Require PHP 5.3 and higher
$id = trim(strstr(strstr($String, '='), ']', true), '=]');

// Any PHP version
$id = trim(strrev(strstr(strrev((strstr($String, '='))), ']')), '=]');
<?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));
}

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