簡體   English   中英

分割逗號分隔的字符串(php + regex)

[英]split a comma separated string (php + regex )

我正在嘗試從以下格式化代碼中提取:

name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}

分為三個參數

name
desc
{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}

我已經有了一些東西: list($field1, $field2,$field3) = preg_split(' [,] ', $param); ,但我對此感到困惑。 問題出在逗號里面

有什么幫助嗎? 提前致謝。

在PHP中,您可以執行以下操作:

$s = 'name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}';

$arr = preg_split('~{tag=.+?{/tag}(*SKIP)(*F)|\h*,\h*~', $s);

print_r($arr);

輸出:

Array
(
    [0] => name
    [1] => desc
    [2] => {tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}
)

正則演示

{tag=.+?{/tag}(*SKIP)(*F)將匹配開始和結束標記之間的所有文本,並跳過該文本。

為什么不完成解決方法

$param = "name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}";

$s = split(',', $param);
$s[2] = implode(',', array_splice($s,2));
var_dump($s);

array(3) {
  [0]=>
  string(4) "name"
  [1]=>
  string(5) " desc"
  [2]=>
  string(120) "{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}"
}

您可能只是利用explode()函數的第三個參數(您只需要用逗號分隔三段字符串,因此只需將其告知explode()函數即可!):

<?php
$str = 'name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}';

$arr = array_map(
        function($v) { return trim($v); },
        explode(',', $str, 3) // <-- Actually, this statement is the only thing you need :) 
       );

echo '<pre>';
print_r($arr);
echo '</pre>';

array_map()函數的使用僅出於美觀目的! (用於trim()值!)

暫無
暫無

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

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