Поэтому я знаю, как извлекать текст из строки php, когда он чисто разделяется двумя разными символами (например, [abc])...
Тем не менее, я столкнулся с проблемой, когда мне нужно извлечь текст, который находится между двумя экземплярами одного и того же символа ('/'). Что еще более сложно, так это то, что это может произойти несколько раз в одной строке.
Пример должен помочь сделать это понятным:
"This is /a/ silly ex/amp/le of what I /me/an."
В этом случае я хотел бы захватить 'a', 'amp' and 'me'
.
Эти примеры показывают множество случаев, в которые я мог бы столкнуться (разные длины и случаи, когда я не хватаю целое слово, кроме букв внутри слова).
Что я пробовал:
('/(\/.+?)+(\/)/i')
Но это, как и ожидалось, захватывает все между первой и последней косой чертой. Идеал был бы способом сопоставления до появления NEXT косой черты, а не последней...
Я уже давно занимаюсь поиском в Интернете, но я только придумываю случаи с двумя разными разделителями.
Вы можете использовать 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
/
в качестве разделителя. Когда ваш шаблон поиска включает в себя/
, он может улучшить читаемость, чтобы использовать другой символ и избежать экранирования:#/.+?/#