Подтвердить что ты не робот

Извлечь подстроку между двумя символами в строке PHP

Есть ли функция php, которая может извлекать фразу между двумя разными символами в строке? Что-то вроде substr();

Пример:

$String = [modid=256];

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

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

Таким образом, $id будет 256

Любая помощь будет оценена:)

4b9b3361

Ответ 1

используйте этот код

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

рабочий пример http://codepad.viper-7.com/0eD2ns

Ответ 2

Использование:

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

?>

Ответ 3

$String = "[modid=256]";

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

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

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

Ответ 4

Если вы не хотите использовать выражение reqular, используйте 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, '='))), ']')), '=]');

Ответ 5

Регулярное выражение - ваш друг.

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

Это будет соответствовать любому числу, для других значений вам придется его адаптировать.

Ответ 6

Вы можете использовать регулярное выражение:

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

Ответ 7

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

echo $matches['modId'];

Ответ 8

(перемещен из комментария, потому что здесь легче создать форму)

может быть ленивым подходом, но в таких случаях я обычно сначала взорвал бы свою строку следующим образом:

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

и на втором этапе я избавился бы от этого "]" возможно через rtrim:

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

... но это будет только, если структура всегда точно такая же...

-cheers -

ps: на самом деле это не должно быть $String = "[modid = 256]";?

Ответ 9

Попробуйте регулярное выражение

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

Выход

Массив ([0] = > 256)

DEMO

Объяснение Здесь он использовал "Положительный взгляд" (? < =) в регулярном выражении  например, (? <= foo) bar соответствует бару, когда ему предшествует foo,  здесь (? <= (=)) (\ d +) мы сопоставляем (\ d +) сразу после знака '='.  \ d Соответствует любому символу цифры (0-9).  + Соответствует 1 или более предшествующему токену

Ответ 10

Вы можете использовать регулярное выражение или можете попробовать следующее:

$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. Лучшим способом для этого является регулярное выражение.