2015-11-05 7 views
1

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

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

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

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

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

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

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

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

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

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

+1

Просто подсказка, вы не должны использовать '/' в качестве разделителя. Когда ваш шаблон поиска включает в себя '/', он может улучшить читаемость для использования другого символа и избежать экранирования: '# /. +?/#' – miken32

+0

@ miken32 Ах да, хорошая точка. Я использовал это раньше (для более коротких регулярных выражений, по иронии судьбы), но не думал использовать его здесь. – asg

ответ

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

Спасибо, Кевин! Это сделал трюк. Я принимаю ваш ответ. – asg

0

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

(\/)(.*?)\1 

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

(\*)(.*?)\1 

Regex101

Смежные вопросы