-1

我有这个正则表达式

 preg_match_all('/(?<=|^)(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] ​*)?)(?:\ |)(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€)+(?=|$)|(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€)(?:| )(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] ​*)?)/', strtolower($html_price), $price_array1);

可以用完全相同的结果缩短/清理这段代码吗?

4

1 回答 1

2

如果您希望拥有一个更好看的、自动记录的正则表达式,最好的方法是将其拆分为您可以命名的许多部分,分配给变量,然后使用它来组成完整的正则表达式。

简单的例子:

$currencies = "usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd"
preg_match_all('/(?<=|^)(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] ​*)?)(?:\ |)(?:\$|' + $currencies + '|€)+(?=|$)|(?:\$|'+$currencies+'|€)(?:| )(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] ​*)?)/', strtolower($html_price), $price_array1);

不能继续下去,因为我不知道这个正则表达式应该是什么意思。

于 2013-05-24T13:15:55.410 回答