Нахождение текста между теми же двумя символами в строке php

Так что я знаю, как извлечь текст из строки php, когда он четко разделен двумя разными символами (т.е. [abc])...

Однако сейчас я сталкиваюсь с проблемной ситуацией, когда мне нужно извлечь текст, находящийся между двумя экземплярами одного и того же символа ('/'). Еще сложнее то, что это может происходить несколько раз в пределах одной и той же строки.

Пример должен помочь сделать это более понятным:

"This is /a/ silly ex/amp/le of what I /me/an."

В этом случае я бы хотел захватить 'a', 'amp' and 'me',

Эти примеры показывают различные случаи, с которыми я могу столкнуться (разная длина и случаи, когда я не берусь за целое слово, а за буквы в слове).

Что я пробовал:

('/(\/.+?)+(\/)/i')

Но это, как и ожидалось, захватывает все между первым и последним слешем. Идеальным будет способ совпадения до СЛЕДУЮЩЕГО появления слэша, а не до последнего...

Я гуглял это довольно давно, но придумываю только случаи с двумя разными разделителями.

2 ответа

Решение

Ты можешь использовать preg_match_all чтобы получить несколько матчей.

$string = 'This is /a/ silly ex/ampl/e of what/ I me/an';
$regex = '/\/.+?\//';
preg_match_all($regex, $string, $matches);

print_r($matches);


Array
(
    [0] => Array
    (
        [0] => /a/
        [1] => /ampl/
        [2] => / I me/
    )
)

Попробуй это:

(\/)(.*?)\1

Что внутри (\/) будет то, что вы соответствуете между. Например, соответствие между набором * будет выглядеть так:

(\*)(.*?)\1

Regex101

Другие вопросы по тегам