我发现的最简单的解决方案(到目前为止)是这样的:
(\w+) : ?(.*?)(?= ?\w+ :|$)
最后,添加?最后,正如艾伦所建议的那样,输出更加出色.
(\w+) : ?(.*?)(?= ?\w+ :|$) ?
输出:
[0] => Array
(
[0] => bypass_first_page :
[1] => x_company :
[2] => x_cust_id : 12345
[3] => x_customer_ip :
[4] => x_customer_tax_id :
[5] => x_description : 98765
[6] => x_duty :
[7] => x_email_customer : an_example@example.com
[8] => x_fax :
[9] => x_footer_email_receipt :
[10] => x_fp_hash : 747ffeddfe4e106a9c67363ebff996ad
[11] => x_fp_timestamp : 1525100766
[12] => x_invoice_num : R000098765
[13] => x_login : MY-LOGIN-ID
[14] => x_logo_url :
[15] => x_merchant_email :
[16] => x_method :
[17] => x_phone : (416) 555-1212
[18] => x_po_num :
[19] => x_receipt_link_method : GET
[20] => x_reference_3 : 1234
[21] => x_relay_response : TRUE
[22] => x_relay_url :
)
[1] => Array
(
[0] => bypass_first_page
[1] => x_company
[2] => x_cust_id
[3] => x_customer_ip
[4] => x_customer_tax_id
[5] => x_description
[6] => x_duty
[7] => x_email_customer
[8] => x_fax
[9] => x_footer_email_receipt
[10] => x_fp_hash
[11] => x_fp_timestamp
[12] => x_invoice_num
[13] => x_login
[14] => x_logo_url
[15] => x_merchant_email
[16] => x_method
[17] => x_phone
[18] => x_po_num
[19] => x_receipt_link_method
[20] => x_reference_3
[21] => x_relay_response
[22] => x_relay_url
)
[2] => Array
(
[0] =>
[1] =>
[2] => 12345
[3] =>
[4] =>
[5] => 98765
[6] =>
[7] => an_example@example.com
[8] =>
[9] =>
[10] => 747ffeddfe4e106a9c67363ebff996ad
[11] => 1525100766
[12] => R000098765
[13] => MY-LOGIN-ID
[14] =>
[15] =>
[16] =>
[17] => (416) 555-1212
[18] =>
[19] => GET
[20] => 1234
[21] => TRUE
[22] =>
)
我做了一些测试,认为这应该符合要求.
PS:我提出的第一个解决方案是this:
(?:^| )(\w+) : ?(?!\w+ : )(?:(.*?)(?= \w+ :|$))?
它有点冗长,但也可能对你有所帮助.