php正则表达式返回特定字符串

php正则表达式返回特定字符串,php,regex,Php,Regex,比如说,我想返回一个名称: $re = "/(name is )[a-z- ]*( )/i"; $str = "My name is John "; preg_match($re, $str, $matches); print_r($matches); 结果是: Array ( [0] => name is John [1] => name is [2] => ) 那么我们来看看这个, $string = "My name is John

比如说,我想返回一个名称:

$re = "/(name is )[a-z- ]*( )/i";
$str = "My name is John ";

preg_match($re, $str, $matches);

print_r($matches);
结果是:

Array
(
    [0] => name is John 
    [1] => name is 
    [2] =>  
)
那么我们来看看这个,

$string = "My name is John and I like Ice-cream";
$pattern = "My name is $1 and I like $2";
有了这个,我得到了: 排列

这和我传递的字符串差不多

我想要的是比较和提取变量,这样我就可以将它们用作变量
$1
$2
,或者类似的东西

或者可能返回关联数组或以下项目的方法:

Array("1" => "John" , "2" => "Ice-cream")
任何变通方法或想法都会受到高度赞赏,只要它们按照我上面要求的方式工作

$str = 'My name is John and I like Ice-cream';
$re = '/My name is (\S+) and I like (\S+)/';
preg_match($re, $str, $matches);

print_r($matches);
返回

Array
(
    [0] => My name is John and I like Ice-cream
    [1] => John
    [2] => Ice-cream
)
\\S
匹配非空白

将其更改为
,以匹配任何内容,只要模式中的其他字符串(“我的名字是”和“我喜欢”)是固定的,就可以工作

返回

Array
(
    [0] => My name is John and I like Ice-cream
    [1] => John
    [2] => Ice-cream
)
\\S
匹配非空白


将其更改为
,以匹配任何内容,只要模式中的其他字符串(“我的名字是”和“我喜欢”)是固定的,就可以工作。

不太干净,但可能会有帮助

$string = "My name is John Cena and I like Ice-cream";
$pattern = "My name is $ and I like $";
print_r(getArray($string, $pattern));

function getArray($input, $pattern){

    $delimiter = rand();
    while (strpos($input,$delimiter) !== false) {
        $delimiter++;
    }

    $exps = explode("$",$pattern);
    foreach($exps as $exp){
        $input = str_replace($exp,",", $input);
    }

    $responses = explode(",", $input);
    array_shift($responses);
    return $responses;

}
它返回:

Array
(
    [0] => John Cena
    [1] => Ice-cream
)

不是很干净,但可能会有帮助

$string = "My name is John Cena and I like Ice-cream";
$pattern = "My name is $ and I like $";
print_r(getArray($string, $pattern));

function getArray($input, $pattern){

    $delimiter = rand();
    while (strpos($input,$delimiter) !== false) {
        $delimiter++;
    }

    $exps = explode("$",$pattern);
    foreach($exps as $exp){
        $input = str_replace($exp,",", $input);
    }

    $responses = explode(",", $input);
    array_shift($responses);
    return $responses;

}
它返回:

Array
(
    [0] => John Cena
    [1] => Ice-cream
)

你没有在名字周围放一个捕获组。如果您这样做,结果数组将提供足够的信息,您可以从中派生出所需的数组。@Marty,多个项目的情况如何?有代码要共享吗?您可以创建多个捕获组。您没有在名称周围放置捕获组。如果您这样做,结果数组将提供足够的信息,您可以从中派生出所需的数组。@Marty,多个项目的情况如何?有要共享的代码吗?您可以创建多个捕获组。您不需要在正则表达式中转义“`”。如果一个名字包含空格,或者你喜欢的名字包含空格,这将失败。太棒了。我想我可以从这里坐船了。@arjan添加了一些关于空格问题的文字。然而,关于逃跑的事情我不明白。嗯,@Arjan,
如果一个名字包含空格,这将失败
是的,这是真的。但是,有办法克服吗?@syck关于空格,我只需要使用
*
+
匹配任何字符。您不需要在正则表达式中转义“`”。如果一个名字包含空格,或者你喜欢的名字包含空格,这将失败。太棒了。我想我可以从这里坐船了。@arjan添加了一些关于空格问题的文字。然而,关于逃跑的事情我不明白。嗯,@Arjan,
如果一个名字包含空格,这将失败
是的,这是真的。但是,有办法克服吗?@syck关于空格,我只需要使用
*
+
来匹配任何字符。