我得到一个像这样的字符串:
'1': '-' '10': CustomerA; 79,00 EUR/Std '11': CustomerB; 155,00 EUR/Std '12': CustomerC; 75,00 EUR/Std '13': CustomerD; 50,00 EUR/Std '2': CustomerA; 000 EUR/Std '3': CustomerA; 000 EUR/Std '4': CustomerA; 120,00 EUR/Std '5': Customer; 75,00 EUR/Std
更好的观点:
'1': '-'
'10': CustomerA; 79,00 EUR/Std
'11': CustomerB; 155,00 EUR/Std
'12': CustomerC; 75,00 EUR/Std
'13': CustomerD; 50,00 EUR/Std
'2': CustomerA; 000 EUR/Std
尝试使用此数据获取数组:
array(
'key' => <CustomerName>; <Price> EUR/Std,
...);
我已经尝试了这个,但它只有在有文字换行时才有效..
$string = preg_split('[0-9+]', $string);
$pattern = "~^'(\d+)':\s+(.+)$~mx";
preg_match_all($pattern, $string, $matches);
$result = array_combine($matches[1], $matches[2]);
你能帮我解决这个问题吗?
答案 0 :(得分:2)
您可以在不拆分字符串的情况下使用此模式:
~
'\d+': # one-or-more digits wrapped by single quotes, followed by colon
\s+ # one-or-more spaces
([^']+) # group 1: one-or-more not-single quote char
; # semicolon
\s+ # one-or-more spaces
(.+?) # group 2: one-or-more character, ungreedy option
\s+ # one-or-more spaces
(EUR/\w+) # group 3: literally “EUR/” followed by one-or-more word chars
~x
的 regex101 demo 强>
小组是:
在第1组中,我使用任何非引号字符来避免第一次空'1:'
匹配。
变体:
(EUR/\w+)
替换为(\w+/\w+)
/Std
是可选的,请将(EUR/\w+)
替换为(EUR(/\w+)?)
或(\w+(/\w+)?)
答案 1 :(得分:0)
谢谢你的回答。我将你的$pattern
修改为:
~'(\d+)+':([^']+;\s+.+?)\s+(EUR/\w+)~x
我只需要ID和客户公司的价格。然后我使用explode
函数。