Php 使用正则表达式提取两个单词之间的单词

Php 使用正则表达式提取两个单词之间的单词,php,regex,preg-match,Php,Regex,Preg Match,我有一个字符串: 8个晚上你给卷毛狗涂鸦 我希望检索夜晚和狮子狗之间的所有东西,因此在上面的示例中,输出应该是you doodle 我正在使用下面的正则表达式。请有人指出我可能做错了什么 if (preg_match("nights\s(.*)\spoodle", "8 nights you doodle poodle", $matches1)) { echo $matches1[0]."<br />"; } if(preg_match(“nights\s(.*)\spo

我有一个字符串:

8个晚上你给卷毛狗涂鸦

我希望检索
夜晚
狮子狗
之间的所有东西,因此在上面的示例中,输出应该是
you doodle

我正在使用下面的正则表达式。请有人指出我可能做错了什么

if (preg_match("nights\s(.*)\spoodle", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[0]."<br />"; 
}
if(preg_match(“nights\s(.*)\spoodle”,“8晚你涂鸦贵宾犬”,“$matches1)){
echo$matches1[0]。“
”; }
您很接近,但是您在
$matches1
上访问了错误的索引
$matches1[0]
将返回preg_match()中匹配的字符串

试试
$matches1[1]

此外,还需要将正则表达式括在
/
字符中

if (preg_match("/nights\s(.*)\spoodle/", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[1]."<br />"; 
}
if(preg_match(“/nights\s(.*\spoodle/”,“8晚你涂鸦贵宾犬”,$matches1)){
echo$matches1[1]。“
”; }
输出

you doodle<br />
你在涂鸦

您可能想要这样的东西

if (preg_match("/nights\s(.*)\spoodle/", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[1]."<br />"; 
}
if(preg_match(“/nights\s(.*\spoodle/”,“8晚你涂鸦贵宾犬”,$matches1)){
echo$matches1[1]。“
”; }
请访问rubular.com测试正则表达式。这是另一个相关问题:


闻起来很像家庭作业。去学regex。是的,我知道这很难,但一旦你了解了所有这些奇怪的匹配字符串是关于什么的,你就会成为一名程序员。@FlyingGuy-没问题,只要它们被标记为
家庭作业
。如果是,我就不会发布我的答案。@Shreder,你的答案无论如何都是垃圾。