Как получить всю строку после определенной строки в массиве в php - PullRequest
0 голосов
/ 07 июня 2018

У меня есть такая строка,

$string = "You have to know [#4], [#2] and [#5] too";

Я хочу получить все значения после строки "[#" в массив.

Я используюметод, и это работает.Но если есть простой текст и нет «[]», то это выдает ошибку.

Я использую этот метод,

$search_string = "[";
    $count = 0;
    $ids = array();

    for ($i = 0; $i < strlen($string); $i++) {
        $position = strpos($string, $search_string , $count);
        if ($position == $count) {
            $ids[] = $string[$position + 2];
        }
        $count++;
    }

Есть ли способ сделать его подходящим?

Моя цель - я хочу получить числа в массив $ ids, которые следуют за строкой «[#», и если фигурная скобка отсутствует, то count ($ ids) будет 0

Ответы [ 2 ]

0 голосов
/ 07 июня 2018
$re = '/\[#(?P<digit>\d+)]/';
$str = 'You have to know [#4], [#2] and [#5] too';

preg_match_all($re, $str, $matches);

var_dump($matches['digit']);
0 голосов
/ 07 июня 2018

Когда вы ищете конкретные шаблоны в некоторой целевой строке, один общий подход заключается в использовании функции preg_match_all () .Например:

$string = "You have to know [#4], [#2] and [#5] too";
$ids = [];
preg_match_all('/\\[#(\d+)[^]]*]/', $string, $ids);

print_r($ids[1]);

В этом случае используется шаблон /\[#\d+([^]]*)]/;он соответствует всем последовательностям, которые начинаются с [#, за которым следует по крайней мере одна цифра, за которой следует любое количество не ] символов, а затем ].Поскольку используется группа захвата, искомые значения сохраняются в $ids[1].

Обратите внимание, что для строк без целевых последовательностей совпадений не будет, поэтому $ids[1] будет пустым массивом.- который выглядит как то, что вы хотите.

Также обратите внимание, что если вы хотите только посчитать количество совпадений, вам даже не нужно указывать $ids в качестве аргумента preg_match_all - просто используйте еговозвращаемое значение:

$string = "You have to know [#4], [#2] and [#5] too";
var_dump( preg_match_all('/\\[#([^]]+)]/', $string) ); // int(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...