PHP 正则表达式/定界符
PHP Regex / delimiter
我有一个字符串 "/test:n(0-2)/div/"
,我想通过正则表达式将其拆分为一个具有函数 preg_split()
的数组。输出应该是这样的:
output = {
[0]=>"test:n(0-2)"
[1]=>"div"
}
然而似乎并没有我想的那么容易。这是我的尝试:https://regex101.com/r/iP2lD8/1
$re = '/\/.*\//';
$str = '/test:n(0-2)/div/';
$subst = '';
$result = preg_replace($re, $subst, $str, 1);
echo "The result of the substitution is ".$result;
Full match 0-17:
/test:n(0-2)/div/
我做错了什么?
只需使用explode()
:
$result = array_filter(explode('/', $string));
array_filter()
从两端的 /
中移除空瓶。或者你可以 trim()
它:
$result = explode('/', trim($string, '/'));
但要回答这个问题,您只需使用 /
作为 preg_split()
的模式,然后像 /\//
那样转义 /
或使用不同的分隔符:
$result = array_filter(preg_split('#/#', $string));
另一种方式取决于您的需要和字符串内容的复杂性:
preg_match_all('#/([^/]+)#', $string, $result);
print_r($result[1]);
$result[0]
是全匹配数组,$result[1]
是第一个捕获组()
的数组。如果有更多的捕获组,您将在 $result
.
中有更多的数组元素
您可以使用
'~/([^/]+)~'
参见regex demo。此模式匹配 /
,然后将 /
.
以外的 1 个或多个字符捕获到组 1 中
您遇到的问题是尾部斜杠被消耗掉了。还有,你用的是贪心匹配,抢的太多了
$re = '~/([^/]+)~';
$str = "/test:n(0-2)/div/";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
// => Array ( [0] => test:n(0-2) [1] => div )
我有一个字符串 "/test:n(0-2)/div/"
,我想通过正则表达式将其拆分为一个具有函数 preg_split()
的数组。输出应该是这样的:
output = {
[0]=>"test:n(0-2)"
[1]=>"div"
}
然而似乎并没有我想的那么容易。这是我的尝试:https://regex101.com/r/iP2lD8/1
$re = '/\/.*\//';
$str = '/test:n(0-2)/div/';
$subst = '';
$result = preg_replace($re, $subst, $str, 1);
echo "The result of the substitution is ".$result;
Full match 0-17:
/test:n(0-2)/div/
我做错了什么?
只需使用explode()
:
$result = array_filter(explode('/', $string));
array_filter()
从两端的 /
中移除空瓶。或者你可以 trim()
它:
$result = explode('/', trim($string, '/'));
但要回答这个问题,您只需使用 /
作为 preg_split()
的模式,然后像 /\//
那样转义 /
或使用不同的分隔符:
$result = array_filter(preg_split('#/#', $string));
另一种方式取决于您的需要和字符串内容的复杂性:
preg_match_all('#/([^/]+)#', $string, $result);
print_r($result[1]);
$result[0]
是全匹配数组,$result[1]
是第一个捕获组()
的数组。如果有更多的捕获组,您将在 $result
.
您可以使用
'~/([^/]+)~'
参见regex demo。此模式匹配 /
,然后将 /
.
您遇到的问题是尾部斜杠被消耗掉了。还有,你用的是贪心匹配,抢的太多了
$re = '~/([^/]+)~';
$str = "/test:n(0-2)/div/";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
// => Array ( [0] => test:n(0-2) [1] => div )