3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php $message = "This is a string using the terms? Wait here's one\nabukuma kai\nabukuma-kai\nabukuma\nabukuma\nkai abukuma abukuma kai"; $search = array( 'abukuma kai', 'abukuma' ); $replacements = array( '<a href="http://kancolle.wikia.com/wiki/Abukuma#Upgrade" class="screenshot" rel="ship/Abukuma_Kai.png" style="color:#0073e6; font-weight:bold; border-bottom: 1px #0073e6 dashed;"><p id="yosup">Abukuma Kai</p></a>', '<a href="http://kancolle.wikia.com/wiki/Abukuma#Basic" class="screenshot" rel="ship/Abukuma.png" style="color:#0073e6; font-weight:bold; border-bottom: 1px #0073e6 dashed;">Abukuma</a>' ); function replaceStrings($haystack, $needle, $replacement, $offset = 0) { if (count($needle) != count($replacement)) { throw new \InvalidArgumentException('Needle length must match replacement length'); } $regexpDelimiter = '/'; $wordDelimiter = '[- \t_]'; // Create the regexp if (is_array($needle)) { $massagedNeedles = array_map( function($s) use($regexpDelimiter, $wordDelimiter) { $s = preg_quote($s, $regexpDelimiter); $s = str_replace(' ', $wordDelimiter, $s); return $s; }, $needle ); // Sort it reverse so we get the longer strings first usort($massagedNeedles, function($a, $b) { return strlen($b) - strlen($a); }); $regexp = implode('|', $massagedNeedles); } else { $regexp = str_replace(' ', $wordDelimiter, preg_quote($needle, $regexpDelimiter)); } $regexp = sprintf('%1$s%2$s%1$si', $regexpDelimiter, $regexp); // Now find the next occurence using the regex we created if (!preg_match($regexp, $haystack, $matches, PREG_OFFSET_CAPTURE, $offset)) { // We've not found one. Let's say we're done. return $haystack; } // We've found one. Clean it up so we can find what replacement it uses $found = array_search(preg_replace('/' . $wordDelimiter . '/', ' ', $matches[0][0]), $needle); if ($found !== false) { $haystack = substr_replace($haystack, $replacement[$found], $matches[0][1], strlen($matches[0][0])); $offset = $matches[0][1] + strlen($replacement[$found]) } else { // This.. shouldn't happen but maybe it will. Let's code a bit defensively. $offset = $matches[0][1] + strlen($matches[0][0]); } return replaceStrings($haystack, $needle, $replacement, $offset); } var_dump(replaceStrings($message, $search, $replacements));
Output for 5.3.0 - 5.5.8
Parse error: syntax error, unexpected '}' in /in/qI6g7 on line 59
Process exited with code 255.