[英]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.