用于拆分发票行项目说明的php正则表达式
我正在尝试拆分字符串,如下所示: 可能包含89798个数字和字母@550.00美元的项目(用于拆分发票行项目说明的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
项目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);