2016-07-29 4 views
3

Я хочу найти все подстроки внутри «%» в строке, но я не понимаю, почему он только находит «id».Regex найти все подстроки внутри% PHP

$test = '<img src="%get_love%" alt="%f_id%" title="%id%" />'; 
$token_regex_inside_tags = "/<([^>]*%([\w]+)%[^>]*)>/"; 
preg_match_all($token_regex_inside_tags, $test, $matches); 

ответ

4

Успенская: - Я предполагаю, что вам нужно, чтобы найти содержание в % только если его между <>.

Вы можете использовать это регулярное выражение, которое использует \G

(?:\G(?!\A)|<)[^%>]*%([^%>]*)% 

Regex Demo

Regex Разбивка

(?: 
    \G(?!\A) #End of previous match 
    | #Alternation 
    < #Match < literally 
) 
[^%>]* #Find anything that's not % or > 
%([^%>]*)% #Find the content within % 

В своем регулярном выражении

< #Matches < literally 
(
    [^>]* #Moves till > is found. Here its in end 
    %([\w]+)% #This part backtracks from last but is just able to find only the last content within two % 
    [^>]* 
)> 
+1

Спасибо за подробное объяснение! – coffeeak

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