PHP preg_match获取2个字符之间的字符串

时间:2016-01-25 17:02:34

标签: php regex preg-match

请考虑这个字符串:

$string = 'hello world /foo bar/';

我希望得到的最终结果:

$result1 = 'hello world';
$result2 = 'foo bar';

我尝试了什么:

preg_match('/\/(.*?)\//', $string, $match);

麻烦是这只返回“foo bar”而不是“hello world”。我可以从原始字符串中删除“/ foo bar /”,但在我的实际用例中需要额外的两步。

3 个答案:

答案 0 :(得分:2)

$result = explode("/", $string);

结果

$result[0] == 'hello world ';
$result[1] == 'foo bar';

您可能想要替换hello world中的空格。更多信息:http://php.net/manual/de/function.explode.php

答案 1 :(得分:2)

正则表达式仅匹配您要匹配的内容。所以你需要让它匹配包括/在内的所有内容,然后对/进行分组。

这应该这样做:

$string = 'hello world /foo bar/';
preg_match('~(.+?)\h*/(.*?)/~', $string, $match);
print_r($match);

PHP演示:https://eval.in/507636
Regex101:https://regex101.com/r/oL5sX9/1(分隔符转义,在PHP使用中更改了分隔符)

0索引是找到的所有内容,第一组是1,第二组是2。所以在/之间是$match[2]; hello world$match[1]\h/之前的任何水平空格,如果您希望在第一组中删除\h*.将考虑空格(除非使用s修饰符指定,否则不包括换行符。)

答案 2 :(得分:0)

要解决此转化问题,请使用以下代码。

$string      = 'hello world /foo bar/';
$returnValue =  str_replace(' /', '/', $string);
$result      =  explode("/", $returnValue);

如果您想要打印它,请在代码中添加以下行。

echo $pieces[0]; // hello world
echo $pieces[1]; // foo bar

https://eval.in/507650