2016-11-26 4 views
1

У меня есть это описание, в котором пользователи отмечают тег.Как захватить текст между несколькими вхождениями тегов?

[MENTION = 1] one [/ MENTION] [MENTION = 4] two [/ MENTION] [MENTION = 748] three [/ MENTION] HI, это я !!

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

['one','two','three'] 

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

preg_match_all('/[MENTION=[1-9]](.*?)[\/MENTION]/s', $html, $matches); 
if($matches) print_r($matches[1]); 

Выход:

[ 
    [0] => one[ 
    [1] => [ 
    [2] => two[ 
    [3] => [ 
    [4] => three[ 
    [5] => H 
] 

Что делать, если мне нужно, чтобы получить номера 1,4,748?

+1

Добавить скобку вокруг [1-9], чтобы захватить их. Например: «MENTION = ([1-9])» –

ответ

3

Квадратные скобки зарезервированы в реестре. Вам нужно убежать от них. Нечто подобное должно работать:

preg_match_all('/\[MENTION=([1-9]+)\](.*?)\[\/MENTION\]/s', $html, $matches); 

Я также добавил захват группы вокруг идентификаторов, ([1-9]+), так что вы получите числовые значения и текстовый контент в матчах ($matches[1] будет содержать цифры и $matches[2] будет содержат текстовое содержимое).

2

(\d+) захвата группы 1 или более номеров

(\w+) захватив группу 1 или более слов символов

как вы знаете из [1-9], что квадратные скобки [] специальные символы в регулярных выражениях, которые обозначают наборы символов. так что если вы хотите, чтобы буквально соответствовать одному из тех, то вы будете иметь, чтобы избежать их обратным слэшем \[\]

<?php 

$html = '[MENTION=1]one[/MENTION][MENTION=4]two[/MENTION][MENTION=748]three[/MENTION] HI, it is me!!'; 

preg_match_all('/\[MENTION=(\d+)\](\w+)\[\/MENTION\]/s', $html, $matches); 

print_r($matches); 
Array 
(
    [0] => Array 
     (
      [0] => [MENTION=1]one[/MENTION] 
      [1] => [MENTION=4]two[/MENTION] 
      [2] => [MENTION=748]three[/MENTION] 
     ) 

    [1] => Array 
     (
      [0] => 1 
      [1] => 4 
      [2] => 748 
     ) 

    [2] => Array 
     (
      [0] => one 
      [1] => two 
      [2] => three 
     ) 

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