AVProgrammer
AVProgrammer

Reputation: 1350

Remove row from HTML table markup in a string

A client has ~7,000 products with a "Your Price: $..." in the description, the price is typed in (there is no existing wildcard).

Here is an example of a description:

<table cellpadding="5" border="0" width="100%"><tbody><tr><td><strong>Part #: </strong></td><td>FIV000-2100</td></tr><tr><td><strong>Retail Price: </strong></td><td>$26.39</td></tr><tr><td class="price"><strong>Your Price: </strong></td><td class="price">$23.75</td></tr><tr><td align="center" colspan="2"/></tr></tbody></table>

Is there a regular expression to use to just remove the Your Price row? What if we wanted to remove the Retail Price row as well?

Upvotes: 2

Views: 156

Answers (2)

Gustav Larsson
Gustav Larsson

Reputation: 8497

You can do something like this (provided $str is the html string):

$pattern = "/<tr><td class=\"price\"><strong>Your Price: <\/strong><\/td><td class=\"price\">\\$[0-9.]+<\/td><\/tr>/";
$str = preg_replace($pattern, "", $str);

The empty string will replace it with nothing, thus removing it.

EDIT:

Escaped some stuff to make it work. I also urge you to use a HTML parser. Let's call this the quick and dirty method.

Upvotes: 3

Justin Morgan
Justin Morgan

Reputation: 30700

I strongly recommend you use an HTML parser for this. That being said, the following will most likely do what you want:

/Your Price:.*?\$(\d+(?:,\d+)?(?:\.\d+)?)/

I don't know MySQL regex syntax, so you might want to double-check that.

Upvotes: 3

Related Questions