How to parse column separated key-value text with possible multiline strings

后端 未结 2 969
小蘑菇
小蘑菇 2021-01-07 06:33

I need to parse the following text:

First: 1
Second: 2
Multiline: blablablabla
bla2bla2bla2
bla3b and key: value in the middle if strting
Fourth: value


        
相关标签:
2条回答
  • 2021-01-07 07:03

    You can do it with this pattern:

    $pattern = '~(?<key>[^:\s]+): (?<value>(?>[^\n]*\R)*?[^\n]*)(?=\R\S+:|$)~';
    
    preg_match_all($pattern, $txt, $matches, PREG_SET_ORDER);
    
    print_r($matches);
    
    0 讨论(0)
  • 2021-01-07 07:03

    You can sort of do it, as long as you consider a single word followed by a colon at the start of a line to be a new key start:

    $data = 'First: 1
    Second: 2
    Multiline: blablablabla
    bla2bla2bla2
    bla3b and key: value in the middle if strting
    Fourth: value';
    
    preg_match_all('/^([a-z]+): (.*?)(?=(^[a-z]+:|\z))/ims', $data, $matches);
    
    var_dump($matches);
    

    This gives the following result:

    array(4) {
      [0]=>
      array(4) {
        [0]=>
        string(10) "First: 1
    "
        [1]=>
        string(11) "Second: 2
    "
        [2]=>
        string(86) "Multiline: blablablabla
    bla2bla2bla2
    bla3b and key: value in the middle if strting
    "
        [3]=>
        string(13) "Fourth: value"
      }
      [1]=>
      array(4) {
        [0]=>
        string(5) "First"
        [1]=>
        string(6) "Second"
        [2]=>
        string(9) "Multiline"
        [3]=>
        string(6) "Fourth"
      }
      [2]=>
      array(4) {
        [0]=>
        string(3) "1
    "
        [1]=>
        string(3) "2
    "
        [2]=>
        string(75) "blablablabla
    bla2bla2bla2
    bla3b and key: value in the middle if strting
    "
        [3]=>
        string(5) "value"
      }
      [3]=>
      array(4) {
        [0]=>
        string(7) "Second:"
        [1]=>
        string(10) "Multiline:"
        [2]=>
        string(7) "Fourth:"
        [3]=>
        string(0) ""
      }
    }
    
    0 讨论(0)
提交回复
热议问题