<?php
$regex = '~{[^}]+}|"Tarzan\d+"|(Tarzan\d+)~';
$subject = 'Jane" "Tarzan12" Tarzan11@Tarzan22 {4 Tarzan34}';
// build array of non-empty Group 1 captures
///////// The six main tasks we're likely to have ////////
// Task 1: Is there a match?
echo "*** Is there a Match? ***<br />\n";
if(empty($matches)) echo "No<br />\n"; else echo "Yes<br />\n";
// Task 2: How many matches are there?
echo "\n<br />*** Number of Matches ***<br />\n";
echo count($matches)."<br />\n";
// Task 3: What is the first match?
echo "\n<br />*** First Match ***<br />\n";
// Task 4: What are all the matches?
echo "\n<br />*** Matches ***<br />\n";
foreach ($matches as $match) echo $match."<br />\n";
}
// Task 5: Replace the matches
$regex,
// in the callback function, if Group 1 is empty,
// set the replacement to the whole match,
// i.e. don't replace
function($m) { if(empty($m[1])) return $m[0]; else return "Superman";},
$subject);
echo "\n<br />*** Replacements ***<br />\n";
echo $replaced."<br />\n";
// Task 6: Split
// Start by replacing by something distinctive,
// as in Step 5. Then split.
$splits = explode("Superman",$replaced); echo "\n<br />*** Splits ***<br />\n";
echo "<pre>"; print_r($splits); echo "</pre>";
PD9waHAKJHJlZ2V4ID0gJ357W159XSt9fCJUYXJ6YW5cZCsifChUYXJ6YW5cZCspfic7CiRzdWJqZWN0ID0gJ0phbmUiICJUYXJ6YW4xMiIgVGFyemFuMTFAVGFyemFuMjIgezQgVGFyemFuMzR9JzsKJGNvdW50ID0gcHJlZ19tYXRjaF9hbGwoJHJlZ2V4LCAkc3ViamVjdCwgJG0pOwoKLy8gYnVpbGQgYXJyYXkgb2Ygbm9uLWVtcHR5IEdyb3VwIDEgY2FwdHVyZXMKJG1hdGNoZXM9YXJyYXlfZmlsdGVyKCRtWzFdKTsKCi8vLy8vLy8vLyBUaGUgc2l4IG1haW4gdGFza3Mgd2UncmUgbGlrZWx5IHRvIGhhdmUgLy8vLy8vLy8KCi8vIFRhc2sgMTogSXMgdGhlcmUgYSBtYXRjaD8KZWNobyAiKioqIElzIHRoZXJlIGEgTWF0Y2g/ICoqKjxiciAvPlxuIjsKaWYoZW1wdHkoJG1hdGNoZXMpKSBlY2hvICJObzxiciAvPlxuIjsKZWxzZSBlY2hvICJZZXM8YnIgLz5cbiI7CgovLyBUYXNrIDI6IEhvdyBtYW55IG1hdGNoZXMgYXJlIHRoZXJlPwplY2hvICJcbjxiciAvPioqKiBOdW1iZXIgb2YgTWF0Y2hlcyAqKio8YnIgLz5cbiI7CmVjaG8gY291bnQoJG1hdGNoZXMpLiI8YnIgLz5cbiI7CgovLyBUYXNrIDM6IFdoYXQgaXMgdGhlIGZpcnN0IG1hdGNoPwplY2hvICJcbjxiciAvPioqKiBGaXJzdCBNYXRjaCAqKio8YnIgLz5cbiI7CmlmKCFlbXB0eSgkbWF0Y2hlcykpIGVjaG8gYXJyYXlfdmFsdWVzKCRtYXRjaGVzKVswXS4iPGJyIC8+XG4iOwoKLy8gVGFzayA0OiBXaGF0IGFyZSBhbGwgdGhlIG1hdGNoZXM/CmVjaG8gIlxuPGJyIC8+KioqIE1hdGNoZXMgKioqPGJyIC8+XG4iOwppZighZW1wdHkoJG1hdGNoZXMpKSB7Cglmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIGVjaG8gJG1hdGNoLiI8YnIgLz5cbiI7Cn0KCi8vIFRhc2sgNTogUmVwbGFjZSB0aGUgbWF0Y2hlcwokcmVwbGFjZWQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCgkkcmVnZXgsCgkvLyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIGlmIEdyb3VwIDEgaXMgZW1wdHksCgkvLyBzZXQgdGhlIHJlcGxhY2VtZW50IHRvIHRoZSB3aG9sZSBtYXRjaCwKCS8vIGkuZS4gZG9uJ3QgcmVwbGFjZQoJZnVuY3Rpb24oJG0pIHsgaWYoZW1wdHkoJG1bMV0pKSByZXR1cm4gJG1bMF07CgkJCQkJZWxzZSByZXR1cm4gIlN1cGVybWFuIjt9LAoJJHN1YmplY3QpOwplY2hvICJcbjxiciAvPioqKiBSZXBsYWNlbWVudHMgKioqPGJyIC8+XG4iOwplY2hvICRyZXBsYWNlZC4iPGJyIC8+XG4iOwoKLy8gVGFzayA2OiBTcGxpdAovLyBTdGFydCBieSByZXBsYWNpbmcgYnkgc29tZXRoaW5nIGRpc3RpbmN0aXZlLAovLyBhcyBpbiBTdGVwIDUuIFRoZW4gc3BsaXQuCiRzcGxpdHMgPSBleHBsb2RlKCJTdXBlcm1hbiIsJHJlcGxhY2VkKTsKZWNobyAiXG48YnIgLz4qKiogU3BsaXRzICoqKjxiciAvPlxuIjsKZWNobyAiPHByZT4iOyBwcmludF9yKCRzcGxpdHMpOyBlY2hvICI8L3ByZT4iOyAK