我有这样的数组:
$array = "this is; some text delimiter; and brackets {here} some; sometext; text; again brackets {title} are here";
我需要在“;”的最后一次出现时拆分它在“{”之前而不是在“}”之前。像这样:
Array(
[0] => this is; some text delimiter;
[1] => and brackets {here}
[2] => some; sometext; text;
[3] => again brackets {title}
[4] => are here
)
有人可以建议我怎么做?
答案 0 :(得分:0)
好的,这是我的尝试:
$array = "this is; some text delimiter; and brackets {here} some; sometext; text; again brackets {title} are here";
$re = '/((?<=})\s)|(;(?=[^;]+{))/';
$split = preg_split($re, $array);
print_r($split);
正则表达式解释:https://regex101.com/r/jRwu1e/1
所以,这应该找到每个空格后跟括号和括号前的每个分号,然后用它来分割字符串。
演示:https://eval.in/699668
附:如果你需要关闭分号(在输出中),需要很少的mod,但这可能是起点......
编辑:在输出中保留分号的另一个积极的看法:
$re = '/((?<=})\s)|((?<=;) (?=[^;]+{))/';
编辑2: 正则表达式解释,请求:
第一组((?<=})\s)
匹配括号后面的空格,positive lookbehind
:
1)https://regex101.com/r/FbC2hG/1
第二组((?<=;) (?=[^;]+{))
应该与分号后面的空格匹配,但是在开括号之前放置的分号(括号前的最后一次出现,所以应该跳过先前的出现;否定的字符类[^;]
,如果是的话术语?)。
我使用了positive lookbehind
和positive lookahead
:
2)https://regex101.com/r/H8rU5i/2
这两个正则表达式应该在所需的位置分割字符串: