Ayuda PHP Regex para analizar el precio de una cadena

Sé que este tema ha sido cubierto hasta cierto punto, pero después de algunos días todavía tengo problemas para encontrar la mejor manera de analizar el precio de un bloque de texto.

Estos son algunos ejemplos: este auto cuesta $ 15k y tiene $ 200 en mejoras. Esos cinturones cuestan USD 500.00 y pido 50 para el envío.

Mi enfoque ha sido hacer tres partidas Regex por separado:

  1. Para encontrar los precios que se abrevian con un K
  2. Para encontrar los precios con un prefijo
  3. Para encontrar los precios con un sufijo

busca dólares con miles abreviados

preg_match_all('/^[0-9,]+(\.[0-9]{2})?(k)+$/', strtolower($description), $price_array1); 

buscar dólares con prefijos

 preg_match_all('/^(\$|\$ |price|price |price is |price:|price: |us|us |usd|usd |asking|asking |wanting|wanting |want|want |sgd|euro|euro |£|£ |€|€ |gbp|gbp |cdn|cdn |)+[0-9,]+(\.[0-9]{2})?$/', strtolower($description), $price_array2); 

busca dólares con sufijos

 preg_match_all('/(\$[0-9,]+(\.[0-9]{2})?)( eur|eur| firm| obo| shipped| \$|\$| €|€| £|£| gbp|gbp| dollar| aud)+/', strtolower($description), $price_array3); 

Pero en realidad ninguno de estos parece estar funcionando. Creo que tengo mi Regex correcta? Pero no estoy seguro de por qué no coinciden con nada. Debo admitir que estoy un poco confundido acerca de si debo usar ^ y $, pero lo he intentado con y sin y no parece marcar la diferencia. Cualquier ayuda sería apreciada. Gracias.

Esta es mi solución para hacer coincidir estrictamente números similares a dinero (no notará ningún prefijo o sufijo, incluso k por mil):

/(?

Aceptará 34563745,34534 , 283947982.234 , 283.432 , 234424. , 4234,4324 , 2.234.434,23442 , 3,234,234.234 , 324849000 . Pero rechazará .453985 , ..,.,.434.,.34 , 234,43.234 , 23467,4443.234 .

Lo siguiente coincidirá con el prefijo insensible a mayúsculas y minúsculas y con k (para miles), además de los números simples:

/(?<= |^)(?:(?i)(?:\$|USD) *)?(?:[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]*)?)(?:(?i)k)?(?![0-9.,])/

Si desea agregar más prefijo, puede cambiar esta parte de la expresión regular:

(?:\$|USD)

Simplemente agregue más prefijo, sin espacio inicial o final. La expresión regular intentará coincidir incluso si hay muchos espacios.

Lo siguiente solo coincidirá con el número con sufijo (con indicador de mil opcional):

/(?<= |^)(?:[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]*)?)(?:(?i)(?:k )? *(?:\$|USD))(?= |$)/

Igual que arriba si desea agregar más sufijo.

Prueba de entrada y probarlo :

Here's are some examples: This car is $15k and has $200 in upgrades Those belts are USD 500.00 and I'm asking 50 for shipping 345,345.45 495.344,424 ..,5435 878,543.455.345 345345435.545 234728394,34345 345, 453. 0.4355 .453 sdfsd usd 23423423K