划分一个字符串
问题描述:
我想要做的是取一个字符串并将其分成较小的部分。输入字符串有一个固定的结构:划分一个字符串
{something here}loremipsum;loremipsum2;{something else here} ...
我想什么做的是每次我找到一个支架或时间创建子“;”,即:
{ something here }
lorem ipsum
lorem ipsum 2
{ something else here }
的PHP代码到目前为止我写的东西并不总是很好,这意味着有时候我会得到像{something here}loremipsum
这样的一个单独的部分,当它分成两部分时。
public function divide() {
$item = "";
$splitted_instructions = str_split($this->instructions);
for($i=0; $i<count($splitted_instructions); $i++) {
if ($splitted_instructions[$i] == "{") {
while ($splitted_instructions[$i+1] != "}") {
$i++;
$item .= $splitted_instructions[$i];
}
$item = "{" . $item . "}";
$items[] = $item;
$item = "";
} else {
while ($splitted_instructions[$i+1] != ";" && $i<count($splitted_instructions)) {
$i++;
$item .= $splitted_instructions[$i];
}
$items[] = $item;
$item = "";
}
}
print_r($items);
}
当然,如果有更好的方式来做到这一点,请让我知道:)
答
$parts = preg_split("/((?<=\\})|\\;|(?=\\{))/", $source, -1, PREG_SPLIT_NO_EMPTY);
它拆分由正则表达式定义的分隔符:
- 它由
}
字符前面光标位置 -
;
字符 - 随后是一个
{
字符光标位置
答
正则表达式的简单应用:
$string = preg_replace('/({.*?})(.*?);(.*?);({.*?})/', "\\1\n\\2\n\\3\n\\4\n", $string);
我不知道的全部代码,但我期望多次调用'explode'和可能'implode'可以完成这项工作。 – Chris
@Chris感谢您的评论,这也可以工作,我认为 – user1301428