что я пытаюсь сделать, учитывая строку, такую как
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
\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);
Других решений пока нет …