【发布时间】:2015-11-02 04:56:45
【问题描述】:
我想要做的是,给定一个字符串,例如
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
【问题讨论】:
-
所以你是说正则表达式太“greedy”了?
-
download\s*\b(.*?)\b\s*music\b -
是的,就是这样......这个想法是它应该找到
download,然后在它之后寻找music,只要它找到它,而不匹配中间。
标签: php regex pattern-matching