从一个字符串中获取某个词,该词在一个单词之后但在另一个单词之前?

4

想知道从字符串中提取单词的最佳方法,但是只提取在指定单词之后和另一个单词之前的所有单词。

例如:

$string = "Radio that plays Drum & Bass music";

我希望能够输出“Drum & Bass”这部分内容,因此需要输出play和music之间的所有单词之后以及在play和music之间(即在play和music之前)的所有单词。

有什么想法吗?

Jamie

2个回答

2

一种方法:

preg_match('/plays (.*) music/', $string, $match);
echo $match[1];

2

使用带有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()来完成这个任务。

可视化:

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接