preg_match_all为两个单词,允许在中间的字符

时间:2015-08-10 10:08:13

标签: php regex pattern-matching

我正在尝试做的是,给出一个字符串,如

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

1 个答案:

答案 0 :(得分:3)

\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);