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

1

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

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

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

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

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

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

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

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

Но это, как и ожидалось, захватывает все между первой и последней косой чертой. Идеал был бы способом сопоставления до появления NEXT косой черты, а не последней...

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

  • 1
    Просто совет, вам не нужно использовать / в качестве разделителя. Когда ваш шаблон поиска включает в себя / , он может улучшить читаемость, чтобы использовать другой символ и избежать экранирования: #/.+?/#
  • 0
    @miken32 miken32 Ах, да, хорошая мысль. Я использовал это раньше (для коротких регулярных выражений, по иронии судьбы), но не думал об использовании здесь.
Теги:
string

2 ответа

1
Лучший ответ

Вы можете использовать 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/
    )
)
  • 0
    Спасибо, Кевин! Это добилось цели. Я принимаю ваш ответ.
0

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

(\/)(.*?)\1

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

(\*)(.*?)\1

Regex101

Ещё вопросы

Сообщество Overcoder
Наверх
Меню