<?php
function ParseText($text) {
$re = '/\[\[(?P<DoubleBracket>.*?)]]|\[(?P<Bracket>.*?)]|\((?P<Paren>.*?)\)|(?<Arrow><---+>?|---+>)/s';
$keys = array('DoubleBracket', 'Bracket', 'Paren', 'Arrow'); $lastStart = 0;
if (preg_match_all($re, $text, $matches, PREG_SET_ORDER
| PREG_OFFSET_CAPTURE
)) { foreach ($matches as $match) {
$start = $match[0][1];
$prefix = substr($text, $lastStart, $start - $lastStart); $lastStart = $start + strlen($match[0][0]); }
foreach ($keys as $key) {
if (isset($match[$key]) && $match[$key][1] >= 0) { $result []= array($key, $match[$key][0]); break;
}
}
}
}
$prefix = substr($text, $lastStart); }
return $result;
}
$mytext = <<<'EOT'
Text Text [something]
--->
Text (something 021213)
More Text
EOT;
$parser = ParseText($mytext);
foreach ($parser as $item) {
}
?>
PD9waHAKZnVuY3Rpb24gUGFyc2VUZXh0KCR0ZXh0KSB7CiAgICAkcmUgPSAnL1xbXFsoP1A8RG91YmxlQnJhY2tldD4uKj8pXV18XFsoP1A8QnJhY2tldD4uKj8pXXxcKCg/UDxQYXJlbj4uKj8pXCl8KD88QXJyb3c+PC0tLSs+P3wtLS0rPikvcyc7CiAgICAka2V5cyA9IGFycmF5KCdEb3VibGVCcmFja2V0JywgJ0JyYWNrZXQnLCAnUGFyZW4nLCAnQXJyb3cnKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgJGxhc3RTdGFydCA9IDA7CiAgICBpZiAocHJlZ19tYXRjaF9hbGwoJHJlLCAkdGV4dCwgJG1hdGNoZXMsIFBSRUdfU0VUX09SREVSIHwgUFJFR19PRkZTRVRfQ0FQVFVSRSkpIHsKICAgICAgICBmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsKICAgICAgICAgICAgJHN0YXJ0ID0gJG1hdGNoWzBdWzFdOwogICAgICAgICAgICAkcHJlZml4ID0gc3Vic3RyKCR0ZXh0LCAkbGFzdFN0YXJ0LCAkc3RhcnQgLSAkbGFzdFN0YXJ0KTsKICAgICAgICAgICAgJGxhc3RTdGFydCA9ICRzdGFydCArIHN0cmxlbigkbWF0Y2hbMF1bMF0pOwogICAgICAgICAgICBpZiAoJHByZWZpeCAhPSAnJyAmJiAhY3R5cGVfc3BhY2UoJHByZWZpeCkpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgW109IGFycmF5KCdUZXh0JywgdHJpbSgkcHJlZml4KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaFska2V5XSkgJiYgJG1hdGNoWyRrZXldWzFdID49IDApIHsKICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IFtdPSAgYXJyYXkoJGtleSwgJG1hdGNoWyRrZXldWzBdKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICRwcmVmaXggPSBzdWJzdHIoJHRleHQsICRsYXN0U3RhcnQpOwogICAgaWYgKCRwcmVmaXggIT0gJycgJiYgIWN0eXBlX3NwYWNlKCRwcmVmaXgpKSB7CiAgICAgICAgJHJlc3VsdCBbXT0gYXJyYXkoJ1RleHQnLCB0cmltKCRwcmVmaXgpKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgokbXl0ZXh0ID0gPDw8J0VPVCcKVGV4dCBUZXh0IFtzb21ldGhpbmddCi0tLT4KVGV4dCAoc29tZXRoaW5nIDAyMTIxMykKTW9yZSBUZXh0CkVPVDsKCiRwYXJzZXIgPSBQYXJzZVRleHQoJG15dGV4dCk7CmZvcmVhY2ggKCRwYXJzZXIgYXMgJGl0ZW0pIHsKICAgIHByaW50X3IoJGl0ZW0pOwp9Cj8+Cg==