Hướng dẫn php explode string with quotes - chuỗi php bùng nổ với dấu ngoặc kép

52

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm cách nào tôi có thể phát nổ chuỗi sau:

Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor

vào trong

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")

Để văn bản trong trích dẫn được coi là một từ duy nhất.

Đây là những gì tôi có bây giờ:

$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
$noquotes = str_replace("%22", "", $mytext");
$newarray = explode(" ", $noquotes);

Nhưng mã của tôi chia từng từ thành một mảng. Làm thế nào để tôi tạo ra các từ bên trong dấu ngoặc kép được coi là một từ?

Hướng dẫn php explode string with quotes - chuỗi php bùng nổ với dấu ngoặc kép

Đã hỏi ngày 4 tháng 2 năm 2010 lúc 19:08Feb 4, 2010 at 19:08

2

Bạn có thể sử dụng

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
3:

$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \\"elit" dolor';
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches);
print_r($matches);

sẽ sản xuất:

Array
(
    [0] => Array
        (
            [0] => Lorem
            [1] => ipsum
            [2] => "dolor sit amet"
            [3] => consectetur
            [4] => "adipiscing \"elit"
            [5] => dolor
        )

)

Và như bạn có thể thấy, nó cũng chiếm các trích dẫn thoát ra bên trong các chuỗi được trích dẫn.

CHỈNH SỬA

Một lời giải thích ngắn:

"           # match the character '"'
(?:         # start non-capture group 1 
  \\        #   match the character '\'
  .         #   match any character except line breaks
  |         #   OR
  [^\\"]    #   match any character except '\' and '"'
)*          # end non-capture group 1 and repeat it zero or more times
"           # match the character '"'
|           # OR
\S+         # match a non-whitespace character: [^\s] and repeat it one or more times

Và trong trường hợp khớp

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
4 thay vì báo giá kép, bạn sẽ làm:

preg_match_all('/%22(?:\\\\.|(?!%22).)*%22|\S+/', $text, $matches);

Đã trả lời ngày 4 tháng 2 năm 2010 lúc 19:18Feb 4, 2010 at 19:18

Bart Kiersbart KiersBart Kiers

163K35 Huy hiệu vàng290 Huy hiệu bạc284 Huy hiệu Đồng35 gold badges290 silver badges284 bronze badges

16

Điều này sẽ dễ dàng hơn nhiều với

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
5.

$test = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor';
var_dump(str_getcsv($test, ' '));

Mang đến cho bạn

array(6) {
  [0]=>
  string(5) "Lorem"
  [1]=>
  string(5) "ipsum"
  [2]=>
  string(14) "dolor sit amet"
  [3]=>
  string(11) "consectetur"
  [4]=>
  string(15) "adipiscing elit"
  [5]=>
  string(5) "dolor"
}

Đã trả lời ngày 7 tháng 7 năm 2011 lúc 10:56Jul 7, 2011 at 10:56

PetahpetahPetah

44.7K27 Huy hiệu vàng155 Huy hiệu bạc211 Huy hiệu đồng27 gold badges155 silver badges211 bronze badges

6

Bạn cũng có thể thử chức năng nhiều nổ tung này

function multiexplode ($delimiters,$string)
{

$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return  $launch;
}

$text = "here is a sample: this text, and this will be exploded. this also | this one too :)";
$exploded = multiexplode(array(",",".","|",":"),$text);

print_r($exploded);

Hướng dẫn php explode string with quotes - chuỗi php bùng nổ với dấu ngoặc kép

Taryn

Phim thương hiệu vàng 238K5555 gold badges362 silver badges403 bronze badges

Đã trả lời ngày 25 tháng 5 năm 2013 lúc 9:10May 25, 2013 at 9:10

Hướng dẫn php explode string with quotes - chuỗi php bùng nổ với dấu ngoặc kép

NikznikzNikz

1.2881 Huy hiệu vàng18 Huy hiệu bạc24 Huy hiệu đồng1 gold badge18 silver badges24 bronze badges

1

Tôi đã đến đây với một vấn đề phân tách chuỗi phức tạp tương tự như thế này, nhưng không có câu trả lời nào ở đây đã làm chính xác những gì tôi muốn - vì vậy tôi đã viết của riêng mình.

Tôi đang đăng nó ở đây chỉ trong trường hợp nó hữu ích cho người khác.

Đây có lẽ là một cách rất chậm và không hiệu quả để làm điều đó - nhưng nó hoạt động với tôi.

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
0

Việc sử dụng là như sau.

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
6 mất 5 đối số:

  1. Một mảng các ký tự mở một khối - ví dụ:
    array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
    
    7,
    array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
    
    8, v.v.
  2. Một mảng các ký tự đóng một khối - ví dụ:
    array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
    
    9,
    $mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
    $noquotes = str_replace("%22", "", $mytext");
    $newarray = explode(" ", $noquotes);
    
    0, v.v.
  3. Một mảng các ký tự chuyển đổi một khối - ví dụ:
    $mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
    $noquotes = str_replace("%22", "", $mytext");
    $newarray = explode(" ", $noquotes);
    
    1,
    $mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
    $noquotes = str_replace("%22", "", $mytext");
    $newarray = explode(" ", $noquotes);
    
    2, v.v.
  4. Một mảng các ký tự sẽ gây ra sự chia rẽ vào phần tiếp theo.
  5. Chuỗi để làm việc trên.

Phương pháp này có thể có lỗ hổng - chỉnh sửa được chào đón.

Đã trả lời ngày 20 tháng 5 năm 2015 lúc 17:13May 20, 2015 at 17:13

Trong một số tình huống,

$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
$noquotes = str_replace("%22", "", $mytext");
$newarray = explode(" ", $noquotes);
3 ít được biết đến có thể chứng minh hữu ích:

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
1

Results:

array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
2

Đã trả lời ngày 1 tháng 11 năm 2014 lúc 20:36Nov 1, 2014 at 20:36

Cleongcleongcleong

6,9474 Huy hiệu vàng29 Huy hiệu bạc40 Huy hiệu đồng4 gold badges29 silver badges40 bronze badges