[英]Get specific words from a string that is after one word but before another?
想知道从字符串中获取单词的最佳方法,但是在指定单词之后和之前的单词之前的任何单词。
示例:
$string = "Radio that plays Drum & Bass music";
我想回声一下'Drum&Bass'部分,所以播放后的任何单词和音乐前的任何单词(在播放和音乐之间)
有任何想法吗?
杰米
单程:
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()
来实现此目的。
可视化:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.