Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我有这个正则表达式 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|doll

我有这个正则表达式

 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);

是否可以以完全相同的结果缩短/清除此代码

如果您希望有一个外观更好、自动记录的regexp,最好的方法是将它分成许多部分,您可以命名、分配给变量,然后使用这些部分组成完整的regexp

简单的例子:

$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);

无法继续,因为我不知道这个regexp应该是什么意思。

构建一些测试并开始尝试。从regex操作中获得示例输入和所需输出将非常有用。非常确定没有人会在你不努力的情况下破译这个。给出这个正则表达式应该匹配的字符串。我相信它可以写得更简单,例如,欧元这一部分