从一个单词之后但在另一个单词之前的字符串中获取特定单词?

时间:2014-05-14 21:13:13

标签: php

想知道从字符串中获取单词的最佳方法,但是在指定单词之后和之前的单词之前的任何单词。

示例:

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

然后我想回应一下鼓& amp;低音'部分,所以播放后的任何单词和音乐前的任何单词(在播放和音乐之间)

任何想法?

杰米

2 个答案:

答案 0 :(得分:2)

一种方式:

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

答案 1 :(得分:1)

preg_match_all()与使用lookaround assertionsword boundaries的正则表达式一起使用:

preg_match_all('/(?<=\bplays\b)\s*(.*?)\s*(?=\bmusic\b)/', $string, $matches);

<强>解释

  • (?<= - 正面观察的开始(如果前面有)
  • \bplays\b - 单词plays
  • ) - 结束积极的外观
  • \s* - 匹配单词
  • 之间的可选空格
  • (.*?) - 匹配(并捕获)
  • 之间的所有字词
  • \s* - 匹配单词
  • 之间的可选空格
  • (?= - 积极前瞻的开始(如果跟着)
  • \bmusic\b - 单词music
  • ) - 积极前瞻的结束

如果您希望单词是动态的,可以用变量替换它们(使用字符串连接,sprintf()或类似)。在插入正则表达式中的单词之前逃避它们很重要 - 为此目的使用preg_quote()

<强>可视化:

Demo