Kevin A
Kevin A

Reputation: 41

php - regex to get contents in DIV tags

Hello and thank for looking at my question. I'm in need to grab some data from an HTML snippet. This source is a trusted/structured one so I think it's OK to use regex in this HTML. Dom and other advanced features in php are an overkill I guess.

Here is the format of the HTML snippet.

<div id="d-container">
  <div id="row-custom_1">
     <div class="label">Type</div>
     <div class="content">John Smith</div>
     <div class="clear"></div>
  </div>
</div>

In above, please note the first 2 DIV tags have IDs set. There could be several row-custom_1 like div tags so I will need to escape them.

I'm actually very poor in regex so I'm expecting a help from you to rab the John Smith from above html snippet.

It could be something like

<div * id="row-custom_1" * > * <div * class="content" * >GRAB THIS </div>

but I don't know how to do it in regex. John Smith part won't contain any html for sure. it's from a trusted source that it strips all html and gives the data in above format.

I can understand that regex is never a good idea to process HTML anyway. Thank you very much for any assistance.

Edit just after 30 minutes: Many of the awesome people suggested to use an HTML parser so I did ; worked like a charm. So if anyone comes here with a similar question, as the stupid question author, I'd recommend using DOM for the job.

Upvotes: 3

Views: 1034

Answers (1)

anubhava
anubhava

Reputation: 785156

Here is a simple DOM based code to get your value from the given HTML:

$html = <<< EOF
<div id="d-container">
  <div id="row-custom_1">
     <div class="label">Type</div>
     <div class="content">John Smith</div>
     <div class="clear"></div>
  </div>
</div>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//div[@id='d-container']
         /div[@id='row-custom_1']/div[@class='content']/text())"); 
echo "User Name: [$value]\n"; // prints your user name

OUTPUT:

User Name: [John Smith]

Upvotes: 5

Related Questions