Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
kOROED
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
1

Как получить подстроку из строки?

07.03.2014, 11:17. Просмотров 706. Ответов 3
Метки нет (Все метки)

Есть строка:
PHP
1
$string = 'какой-то текст<#GetResult:45 + 38#>какой-то текст';
Мне нужно получить в переменную $substring всё от "<#GetResult:" до "#>". То есть в данном случае получить строку
PHP
1
 $substring = "45 + 38";
На основании полученных данных производятся вычисления. В изначальной строке вся конструкция от "<#GetResult:" до "#>" заменяется на результат вычислений. В результате должно получиться:
PHP
1
$string = 'какой-то текст83какой-то текст';
Вопрос у меня такой: как производить выборку от "<#GetResult:" до "#>", если неизвестна ни длина выбираемого фрагмента, ни с которого по счёту символа строки $string начинать выборку? И как потом произвести замену?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2014, 11:17
Ответы с готовыми решениями:

Как выбрать из строки подстроку, находящуюся между двумя другими подстроками?
Как выбрать из строки подстроку находяшуюся мужду двумя другими подстраками?...

Как получить определенные данные из строки с разделителями
Есть вот такая строка...

Как получить значение строки в таблице HTML
Всем привет! Помогите пожалуйста с таким вопросом: Есть HTML таблица, к...

Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из строк новую строку, содерж. первые N1 символов строки S1 и последние N2 символов
Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Получить подстроку из строки
Есть строка из латинских букв, слешей в обе стороны и точек. Написать функцию,...

3
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
07.03.2014, 11:50 2
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$string = 'какой-то текст<#GetResult:45 + 38#>какой-то текст';
$pattern_search = "/<#GetResult:(.*?)#>/";
$pattern_replace = "/<#GetResult:.*?#>/";
$substring = "";
 
if(preg_match($pattern_search, $string, $match))
{
    $substring = "\$result = ".$match[1]."; return \$result;";
}
 
if($substring != "")
{
    $result = eval($substring);
 
    if($result != NULL && $result != false)
    {
        $string = preg_replace($pattern_replace, $result, $string);
        echo $string;
    }
}
1
kOROED
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
07.03.2014, 12:59  [ТС] 3
Цитата Сообщение от mav Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$string = 'какой-то текст<#GetResult:45 + 38#>какой-то текст';
$pattern_search = "/<#GetResult:(.*?)#>/";
$pattern_replace = "/<#GetResult:.*?#>/";
$substring = "";
if(preg_match($pattern_search, $string, $match))
{
 $substring = "\$result = ".$match[1]."; return \$result;";
}
if($substring != "")
{
 $result = eval($substring);
if($result != NULL && $result != false)
 {
 $string = preg_replace($pattern_replace, $result, $string);
 echo $string;
 }
}
Спасибо! а как сделать, если в строке много <#GetResult:#> и каждый нужно заменить соответствующим результатом?
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
07.03.2014, 13:15 4
Лучший ответ Сообщение было отмечено kOROED как решение

Решение

kOROED, как-то так может быть, даже будет правильно работать, если будут попадаться одинаковые элементы

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$string = 'какой-то текст<#GetResult:45 + 38#>какой-то текст<#GetResult:120 / 12#>какой-то текст<#GetResult:12.5 * 2#>какой-то текст<#GetResult:5 - 2#>какой-то текст<#GetResult:5 - 2#>';
$pattern_search = "/<#GetResult:(.*?)#>/";
$substring = "";
$string_match = "";
$escape_search = array("+", ".", "*", "[", "]", "{", "}", "/", "(", ")");
$escape_replace = array("\+", "\.", "\*", "\[", "\]", "\{", "\}", "\/", "\(", "\)");
 
if(preg_match_all($pattern_search, $string, $match))
{
    foreach($match[1] as $m)
    {
        $substring = "\$result = ".$m."; return \$result;";
        $pattern_replace = "/<#GetResult:".(str_replace($escape_search, $escape_replace, $m))."#>/U";
 
        if($substring != "")
        {
            $result = eval($substring);
 
            if($result != NULL && $result != false)
            {
                $string = preg_replace($pattern_replace, "<b>".$result."</b>", $string, 1);
            }
        }
    }
}
 
echo $string;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 13:15

Получить подстроку из строки
Добрый вечер. Задача довольно проста - нужно из строки скопировать...

Получить подстроку строки
к примеру дана строка &quot;Powerman 5000 - When Worlds Collide (OST Nikki, djavol -...

Получить подстроку со строки
Всем привет! Как получить подстроку со строки Например, есть строка &quot;012345&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru