Link Parsing
This page is dedicated to discussions on the development of a
better link formatter, i.e. a formatter supporting (optional) link titles, anchors, url parameters etc.
I start posting some code that I'm using to test regex for parsing forced links.
It should correctly parse links like the following
[[HomePage (!Hello world;p=1&q=2) This is the home page with title]]
giving something like this:
This is the home page with title.
The parentheses are used to select ;-separated URL options, like title or URL parameters. The space before the parenthesis is optional.
!Hello world corresponds to the title.
p=1&q=2 corresponds to the URL parameters.
<?php
//$pattern = "/^\[\[(\S*)(\s\(\!(.+)\))?(\s+(.+))?\]\]$/s";
//$pattern = "/\[\[(.*)\]\]/";
$pattern =
"/\[\[([^\(\)\s]+)(\s*\((.+)\))*(\s+.+)*\]\]/";
if ($q) {
print 'String: '.
$q;
preg_match($pattern,
$q,
$matches);
if (is_array($matches)) {
$url =
$matches[1];
$desc =
$matches[4];
$optionlist =
$matches[3];
if ($optionlist) {
$options =
explode(";",
$optionlist);
if (is_array($options)) {
echo '<br />Options: ';
print_r($options);
foreach($options as $option){
switch(true){
case (preg_match("/!(.+)/",
$option,
$istitle)):
$title =
$istitle[1];
break;
case (preg_match("=",
$option,
$isparameter)):
$parameters =
$isparameter[0];
break;
}
}
} else {
echo '<br />Specified options are not valid';
}
} else {
print '<br />No options';
}
echo '<br />Link chunks: ';
print_r($matches);
echo '<br />Rendered link: '.
$this->
Link($url,
'',
$desc,
'',
'',
$title).
'<br />';
} else {
echo 'String does not match pattern';
}
} else {
print 'Please enter a string';
}
?>
CategoryDevelopmentFormatters