想知道从字符串中提取单词的最佳方法,但是只提取在指定单词之后和另一个单词之前的所有单词。
例如:
$string = "Radio that plays Drum & Bass music";
我希望能够输出“Drum & Bass”这部分内容,因此需要输出play和music之间的所有单词之后以及在play和music之间(即在play和music之前)的所有单词。
有什么想法吗?
Jamie
想知道从字符串中提取单词的最佳方法,但是只提取在指定单词之后和另一个单词之前的所有单词。
例如:
$string = "Radio that plays Drum & Bass music";
有什么想法吗?
Jamie
一种方法:
preg_match('/plays (.*) music/', $string, $match);
echo $match[1];
使用带有preg_match_all()
函数的正则表达式,它使用环视断言和词边界:
preg_match_all('/(?<=\bplays\b)\s*(.*?)\s*(?=\bmusic\b)/', $string, $matches);
解释:
(?<=
- 正向后瞻开始(如果前面是)\bplays\b
- 单词plays
)
- 正向后瞻结束\s*
- 匹配单词之间的可选空格(.*?)
- 匹配(并捕获)中间的所有单词\s*
- 匹配单词之间的可选空格(?=
- 正向前瞻开始(如果后面是)\bmusic\b
- 单词music
)
- 正向前瞻结束如果您想使单词动态化,可以使用变量进行替换(使用字符串连接、sprintf()
或类似方法)。在将单词插入正则表达式之前,重要的是对它们进行转义——请使用preg_quote()
来完成这个任务。
可视化: