Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于拆分发票行项目说明的php正则表达式_Php_Regex_Preg Match - Fatal编程技术网

用于拆分发票行项目说明的php正则表达式

用于拆分发票行项目说明的php正则表达式,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试拆分字符串,如下所示: 可能包含89798个数字和字母@550.00美元的项目(项目A) 第4项,共B项,共420.00美元 476584件C项,数量较大,货币符号不同@420.00英镑 进入: 这有意义吗 我正在寻找一个正则表达式模式,将分裂的数量,说明和价格(包括符号) 字符串将始终为: 数量x说明@价格+符号 所以我假设正则表达式是这样的: `(match a number and only a number) x (get description letters and num

我正在尝试拆分字符串,如下所示:

可能包含89798个数字和字母@550.00美元的项目(
项目A

第4项,共B项,共420.00美元

476584件C项,数量较大,货币符号不同@420.00英镑

进入:

这有意义吗

我正在寻找一个正则表达式模式,将分裂的数量,说明和价格(包括符号)

字符串将始终为:

数量x说明@价格+符号

所以我假设正则表达式是这样的:

`(match a number and only a number) x (get description letters and numbers before the @ symbol) @ (match the currency symbol and price)`

我应该如何处理这个问题?

如果
x
@
的两边总是有空格,您可以尝试以下方法:

preg_match('/^(\d+)\s*x\s(.+)\s@\s*([^@]+)$/', $string, $match);
unset($match[0]);
print_r($match);
$pattern = '/\s*(x|@)\s*/';
$array = preg_split($pattern, $input_string);

在您的两个示例中,
x
左侧没有空格。这是字符串的真实情况,还是这是一个输入错误,并且保证在
x
@
周围都有空格?对不起,是的,它的两边都会有空格。最好进行最后的检查
@\s*([^@]+)$
,或者类似的检查?以防万一,有一款产品的名称中有一个
@
?这是完美的,即使在描述中包含@symbols,也能很好地工作,感谢上面答案的简单性和性能,但是如果描述中包含@symbols,它就会中断。无论如何谢谢你
$pattern = '/\s*(x|@)\s*/';
$array = preg_split($pattern, $input_string);