我是新来的,需要你的帮助。我想匹配一个URI的字符串 - 并得到一个子串数组。
这是我的输入字符串:
/part-of-{INTERESETINGSTUFF}/an-url/{MORESTUFF}
我想要这个输出数组:
array(4) {
[0]=>
string(9) "/part-of-"
[1]=>
string(19) "{INTERESETINGSTUFF}"
[2]=>
string(8) "/an-url/"
[3]=>
string(11) "{MORESTUFF}"
}
我已经能够通过模式\{[^}]+\}
使用大括号对所有内容进行preg_match。但是我怎样才能达到我想要的结果呢?
祝你好运!
答案 0 :(得分:1)
这个怎么样? See on regex101
\/.*?(?={|\/)\/?|{.*?}
然后将匹配项存储在数组中。
\/.*?
匹配/
(?={|\/)
或{
,则/
会停止匹配
\/?
在匹配结束时匹配可选/
{.*?}
匹配括号和答案 1 :(得分:0)
您可以使用非常简单的({[^{}]*})
正则表达式匹配{
,除{
以外的零个或多个符号以及}
preg_split
和PREG_SPLIT_DELIM_CAPTURE
}选项(将所有捕获的子值放入结果数组中):
$str = '/part-of-{INTERESETINGSTUFF}/an-url/{MORESTUFF}';
$res = array_filter(preg_split('/({[^{}]*})/', $str, -1, PREG_SPLIT_DELIM_CAPTURE));
print_r($res);
// => Array( [0] => /part-of- [1] => {INTERESETINGSTUFF} [2] => /an-url/ [3] => {MORESTUFF} )
请参阅PHP demo
array_filter
用于从结果数组中删除所有空元素。