PHP:如何在匹配和不匹配正则表达式模式的子字符串中拆分字符串?
问题描述:
I'm new here and need your help. I want to match an string that is an URI - and get an array of substrings.
This is my input string:
/part-of-{INTERESETINGSTUFF}/an-url/{MORESTUFF}
I want this output array:
array(4) {
[0]=>
string(9) "/part-of-"
[1]=>
string(19) "{INTERESETINGSTUFF}"
[2]=>
string(8) "/an-url/"
[3]=>
string(11) "{MORESTUFF}"
}
I'm already able to preg_match everything with curly brackets by the pattern \{[^}]+\}
. But how can I achieve my desired result?
Best regards!
答
You can use a very simple ({[^{}]*})
regex matching {
, zero or more symbols other than {
and }
with preg_split
and PREG_SPLIT_DELIM_CAPTURE
option (that will put all the captured subvalues into the resulting array):
$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} )
See PHP demo
The array_filter
is used to remove all empty elements from the resulting array.
答
What about this. See on regex101
\/.*?(?={|\/)\/?|{.*?}
Then store the matches in an array.
-
\/.*?
matches all character following/
-
(?={|\/)
stops match if next character is{
or/
-
\/?
match optional/
at the end of match -
{.*?}
matches brackets and everything between