<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- template designed by Marco Von Ballmoos -->
<title>Docs for page preg_magic.php</title>
<link rel="stylesheet" href="../media/stylesheet.css" />
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
</head>
<body>
<div class="page-body">
<h2 class="file-name">/preg_magic.php</h2>
<a name="sec-description"></a>
<div class="info-box">
<div class="info-box-title">Description</div>
<div class="nav-bar">
<span class="disabled">Description</span> |
<a href="#sec-classes">Classes</a>
| <a href="#sec-functions">Functions</a>
</div>
<div class="info-box-body">
<!-- ========== Info from phpDoc block ========= -->
<p class="short-description">preg_magic</p>
<p class="description"><p>Class/Function to assist with parsing great piles of garbage (ie: HTML) into nice hashes/associative arrays with a few regular expressions.</p><p><strong>License</strong> <pre> This library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.</pre></p></p>
<ul class="tags">
<li><span class="field">author:</span> Shannon Wynter (<a href="http://fremnet.net/contact">http://fremnet.net/contact</a>)</li>
<li><span class="field">version:</span> 1.0</li>
<li><span class="field">copyright:</span> Copyright Shannon Wynter & Fremnet.net</li>
<li><span class="field">see:</span> <a href="../preg_magic/_preg_magic.php.html#functionpreg_magic">preg_magic()</a></li>
<li><span class="field">license:</span> <a href="http://opensource.org/licenses/gpl-license.php">GNU Public License</a></li>
</ul>
</div>
</div>
<a name="sec-classes"></a>
<div class="info-box">
<div class="info-box-title">Classes</div>
<div class="nav-bar">
<a href="#sec-description">Description</a> |
<span class="disabled">Classes</span>
| <a href="#sec-functions">Functions</a>
</div>
<div class="info-box-body">
<table cellpadding="2" cellspacing="0" class="class-table">
<tr>
<th class="class-table-header">Class</th>
<th class="class-table-header">Description</th>
</tr>
<tr>
<td style="padding-right: 2em; vertical-align: top">
<a href="../preg_magic/preg_magic.html">preg_magic</a>
</td>
<td>
preg_magic
</td>
</tr>
</table>
</div>
</div>
<a name="sec-functions"></a>
<div class="info-box">
<div class="info-box-title">Functions</div>
<div class="nav-bar">
<a href="#sec-description">Description</a> |
<a href="#sec-classes">Classes</a>
| <span class="disabled">Functions</span>
</div>
<div class="info-box-body">
<a name="functionpreg_magic" id="functionpreg_magic"><!-- --></a>
<div class="evenrow">
<div>
<span class="method-title">preg_magic</span> (line <span class="line-number">73</span>)
</div>
<!-- ========== Info from phpDoc block ========= -->
<p class="short-description">preg_magic</p>
<p class="description"><p>Alias for <a href="../preg_magic/preg_magic.html#methodexecute">preg_magic::execute()</a></p><p><strong>Basic synapsis:</strong></p><p><a href="../preg_magic/_preg_magic.php.html#functionpreg_magic">preg_magic</a>($Fields, $Target)</p><p>$Fields is an associative array that contains the structure you expect to extract from the file. It is very important to understand that you must supply the fields in the <em>order</em> that you expect them to be matched.</p><p>There are currently two types of fields <ul><li>simple</li><li>table</li></ul> A simple field is simply defined as 'name' => 'expression to match'</p><p>A table field is a whole lot more complicated but it's also very flexable, and is defined as follows <pre> '@table' => true,
'@table_start' => 'the expression to match at the start of the table',
'@table_end' => 'the expression to match at the end of the table',
'@table_fields => array(of more fields),</pre></p><p>Both @table_start and @table_end will be ignored if this is the root element of the array</p><p>So an example structure might look like <div class="src-code"><ol><li><div class="src-line"><span class="src-php"><?php</span></div></li>
<li><div class="src-line"><span class="src-var">$HistoryFields </span>= <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'cardnumber' </span>=> <span class="src-str">'card number:<\/span>\s*((?:\d{4}\s*){3}\d{4})'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'balance' </span>=> <span class="src-str">'Card balance:<\/td>\s*<td>\s*(\$\d+\.\d+)'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'history' </span>=> <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table' </span>=> <span class="src-id">true</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_start' </span>=> <span class="src-str">'class="results_table">.+?<\/tr>\s*'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_end' </span>=> <span class="src-str">'\s*<\/table>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_fields' </span>=> <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'stamp' </span>=> <span class="src-str">'\s*<tr class="(?:odd|even)">\s*'</span></div></li>
<li><div class="src-line"> . <span class="src-str">'<td>(\d+-\w+-\d+\s*\d+:\d+\s*\w+)<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'type' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'location' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'amount' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'gst' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>\s*<\/tr>\s*'</span></div></li>
<li><div class="src-line"> <span class="src-sym">)</span></div></li>
<li><div class="src-line"> <span class="src-sym">)</span></div></li>
<li><div class="src-line"><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
</ol></div> This example shows two simple fields, and a table</p><p>The structure can be recursive, ie, you can have more table and simple fields beneith the table field</p><p>A full example might look like this <div class="src-code"><ol><li><div class="src-line"><span class="src-php"><?php</span></div></li>
<li><div class="src-line"><span class="src-inc">include_once</span><span class="src-sym">(</span><span class="src-str">'../preg_magic.php'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"> </div></li>
<li><div class="src-line"><span class="src-var">$HistoryFields </span>= <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'cardnumber' </span>=> <span class="src-str">'card number:<\/span>\s*((?:\d{4}\s*){3}\d{4})'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'balance' </span>=> <span class="src-str">'Card balance:<\/td>\s*<td>\s*(\$\d+\.\d+)'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'history' </span>=> <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table' </span>=> <span class="src-id">true</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_start' </span>=> <span class="src-str">'class="results_table">.+?<\/tr>\s*'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_end' </span>=> <span class="src-str">'\s*<\/table>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'@table_fields' </span>=> <span class="src-key">array</span><span class="src-sym">(</span></div></li>
<li><div class="src-line"> <span class="src-str">'stamp' </span>=> <span class="src-str">'\s*<tr class="(?:odd|even)">\s*'</span></div></li>
<li><div class="src-line"> . <span class="src-str">'<td>(\d+-\w+-\d+\s*\d+:\d+\s*\w+)<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'type' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'location' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'amount' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>'</span><span class="src-sym">,</span></div></li>
<li><div class="src-line"> <span class="src-str">'gst' </span>=> <span class="src-str">'<td.*?>\s*([^<]*?)\s*<\/td>\s*<\/tr>\s*'</span></div></li>
<li><div class="src-line"> <span class="src-sym">)</span></div></li>
<li><div class="src-line"> <span class="src-sym">)</span></div></li>
<li><div class="src-line"><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"> </div></li>
<li><div class="src-line"><span class="src-var">$HistoryHTML </span>= <a href="http://www.php.net/preg_replace">preg_replace</a><span class="src-sym">(</span><span class="src-str">"/\s\s+|&nbsp;/"</span><span class="src-sym">,</span><span class="src-str">' '</span><span class="src-sym">,</span><a href="http://www.php.net/file_get_contents">file_get_contents</a><span class="src-sym">(</span><span class="src-str">'history.html'</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"> </div></li>
<li><div class="src-line"><span class="src-var">$Output </span>= <a href="../preg_magic/_preg_magic.php.html#functionpreg_magic">preg_magic</a><span class="src-sym">::</span><a href="../preg_magic/preg_magic.html#methodexecute">execute</a><span class="src-sym">(</span><span class="src-var">$HistoryFields</span><span class="src-sym">, </span><span class="src-var">$HistoryHTML</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"> </div></li>
<li><div class="src-line"><a href="http://www.php.net/print_r">print_r</a><span class="src-sym">(</span><span class="src-var">$Output</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
</ol></div></p></p>
<ul class="tags">
<li><span class="field">return:</span> An associative array containing data, or false on failure to match</li>
</ul>
<div class="method-signature">
<span class="method-result">array|false</span>
<span class="method-name">
preg_magic
</span>
(<span class="var-type">array</span> <span class="var-name">$Fields</span>, <span class="var-type">string</span> <span class="var-name">$Target</span>)
</div>
<ul class="parameters">
<li>
<span class="var-type">array</span>
<span class="var-name">$Fields</span><span class="var-description">: An associative array of fields to be use</span> </li>
<li>
<span class="var-type">string</span>
<span class="var-name">$Target</span><span class="var-description">: The target string to process</span> </li>
</ul>
</div>
</div>
</div>
<p class="notes" id="credit">
Documentation generated on Tue, 05 Feb 2008 22:29:20 +1100 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.1</a>
</p>
</div></body>
</html>