Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RegEx - How to Extract Price?

Tags:

regex

php

How would I extract the dollar amount from the following string

"some text will go here and more and more and then there will be some price $34.03 but that doesn't mean the string will end"

I want to extract $34.03...also want to extract if there is no cents

"some text will go here and more and more and then there will be some price $34 but that doesn't mean the string will end"

Here I want to extract $34

like image 624
st4ck0v3rfl0w Avatar asked Mar 12 '10 05:03

st4ck0v3rfl0w


4 Answers

I'm no regex-guru, but was able to whip up the following with RegExr.

/(\$[0-9]+(\.[0-9]{2})?)/

Matches $35.03 and $35. To accept formats like $35,000.52 you would need to include ,

/(\$[0-9,]+(\.[0-9]{2})?)/

This could likely be improved upon, but from my preliminary tests, it works just fine.

like image 108
Sampson Avatar answered Sep 21 '22 04:09

Sampson


'/\$\d+(?:\.\d+)?/'

if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){
    echo $matches[0]; //which would be $34 or $34.03
}
like image 34
YOU Avatar answered Sep 20 '22 04:09

YOU


Since you don't mention a specific regex engine, you might have to adjust this a bit:

/(\$\d+(\.\d+)?)/
like image 37
Kris Avatar answered Sep 20 '22 04:09

Kris


What about this regexp: \$[0-9.,]+ or \$([0-9.,]+) to strip the $?

It's simple but it does pretty much what you want, it even catches things like this: $1,450.8934 or $14.343.

Of course the drawback it'd be that it'd catch $34.54.23 as well.

Or if you want to catch only two decimals: \$[0-9,]+\.[0-9]{2} it'd catch the $5.23 part of $5.234565.

You can use it with preg_match or preg_match_all.

like image 37
raf Avatar answered Sep 19 '22 04:09

raf