簡體   English   中英

PHP regex - 按字符串對象划分純文本

[英]PHP regex - Divide plain text by string object

我有一個包含以下內容的 file.txt:

{"name":"merli"}{"name":"berta"}{"name":"ivan"}
{"name":"joan"}
{"name":"mireia"}{"name":"pol"}
{"name":"gerard"}

我正在使用此代碼,但我不知道如何在不丟失括號的情況下用“}{”分隔

$exploded = preg_split('/\r\n|\r|\n|}{/', 'file.txt');

我得到的結果是這樣的:

Array (
    0: {"name":"merli"
    1: "name":"berta"
    2: "name":"ivan"}
    3: {"name":"joan"}
    4: {"name":"mireia"
    5: "name":"pol"}
    6: {"name":"gerard"}
)

我需要這個:

Array (
    0: {"name":"merli"}
    1: {"name":"berta"}
    2: {"name":"ivan"}
    3: {"name":"joan"}
    4: {"name":"mireia"}
    5: {"name":"pol"}
    6: {"name":"gerard"}
)

您可以簡單地遍歷字符串字符,而根本不涉及\\r\\n字符。 查找{ , find }並在$temp包含它們之間的所有字符,如下所示。

片段:

<?php

$str = '{"name":"merli"}{"name":"berta"}{"name":"ivan"}
{"name":"joan"}
{"name":"mireia"}{"name":"pol"}
{"name":"gerard"}';

$result = [];
$len = strlen($str);

for($i = 0;$i < $len;++$i){
    while($i < $len && $str[$i] != '{') $i++;
    $temp = '';
    while($i < $len && $str[$i] != '}') $temp .= $str[$i++];
    $temp .= '}';
    $result[] = $temp;
}

print_r($result);

演示: https : //3v4l.org/1OFen

我想

$exploded = str_replace('}{', "}\n{", $file_contents);

足夠。

由於文件內容看起來像無效的 json ,最好修復它。

您可以使用preg_match_all

$fileContents = '
{"name":"merli"}{"name":"berta"}{"name":"ivan"}
{"name":"joan"}
{"name":"mireia"}{"name":"pol"}
{"name":"gerard"}
';

// $matches is the array containing each matche found
preg_match_all('/{[^{]+}+?/', $fileContents, $matches);

// to rearrange $matches as plaintext
echo $result = join("\n", $matches[0]);

輸出:

{"name":"merli"}
{"name":"berta"}
{"name":"ivan"}
{"name":"joan"}
{"name":"mireia"}
{"name":"pol"}
{"name":"gerard"}

你可以在這里試試。

這也會捕獲像{"name":"..."} {"name":"..."}{"name":"..."}everyOtherUnexpectedChar{"name":"..."}

你不能這樣做,因為你在拆分時刪除了分隔符。 要么您必須創建更復雜的 preg_split,要么您必須組合替換和拆分。 嘗試這個:

$content = preg_replace('/\r\n|\r|\n/', '', $content);
$content = preg_replace('/}{/', '},{', $content);
$exploded = preg_split('/,/', $content);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM