PHP在分隔符之前的特定单词的最后一次出现时拆分数组

时间:2016-12-17 12:58:37

标签: php

我有这样的数组:

$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
)

有人可以建议我怎么做?

1 个答案:

答案 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)|((?<=;) (?=[^;]+{))/';

https://eval.in/699671

编辑2: 正则表达式解释,请求:

第一组((?<=})\s)匹配括号后面的空格,positive lookbehind

1)https://regex101.com/r/FbC2hG/1

第二组((?<=;) (?=[^;]+{))应该与分号后面的空格匹配,但是在开括号之前放置的分号(括号前的最后一次出现,所以应该跳过先前的出现;否定的字符类[^;],如果是的话术语?)。 我使用了positive lookbehindpositive lookahead

2)https://regex101.com/r/H8rU5i/2

这两个正则表达式应该在所需的位置分割字符串:

3)https://regex101.com/r/H8rU5i/3