preg_match_all для двух слов, позволяющих символы в середине

что я пытаюсь сделать, учитывая строку, такую ​​как

trying to download some music, give me the details to download the music

получить соответствующий результат через preg_match_all, который даст мне что-то вроде

[0][0] => download some music
[0][1] => some
[1][0] => download the music
[1][1] => the

но я не могу этого достичь. Я использую этот шаблон

§download(.*)music(.*)§

но проблема в том, что он просто соответствует первому download (тот из download some music) и последнее music (тот из download the music), в то время как моя цель — найти все вхождения и получить символы между двумя словами (на самом деле это должно работать для любого количества слов, но давайте начнем с двух).

Любая помощь приветствуется, спасибо! 🙂

ОБНОВИТЬПосле того, как проблема была решена, я написал статью о том, как этот вид регулярных выражений можно использовать для нежный образец матча (или, скорее, для расчета релевантности шаблона в данном тексте): http://www.thecrowned.org/method-for-pattern-relevance-in-text

0

Решение

\bdownload\b(.*?)\bmusic\b

^^

Сделать non greedy поиск. См. демо.

https://regex101.com/r/fM9lY3/29

$re = "/\\bdownload\\b(.*?)\\bmusic\\b/";
$str = "trying to download some music, give me the details to download the music";

preg_match_all($re, $str, $matches);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]