请考虑这个字符串:
$string = 'hello world /foo bar/';
我希望得到的最终结果:
$result1 = 'hello world';
$result2 = 'foo bar';
我尝试了什么:
preg_match('/\/(.*?)\//', $string, $match);
麻烦是这只返回“foo bar”而不是“hello world”。我可以从原始字符串中删除“/ foo bar /”,但在我的实际用例中需要额外的两步。
答案 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