3v4l.org

run code in 300+ PHP versions simultaneously
<?php $posts['Author1']=['sdsadsad daSDA DDASd asd aSD Sd dA SD ASD sadasdasds sadasd @jhsad.sadas.com sdsdADSA sada', 'KDJKLFFD GFDGFDHGF GFHGFDHGFH GFHFGH Lklfgfd gdfsgfdsg df gfdhgf g hfghghjh jhg @jhsad.sadas.com sfgff fsdfdsf', 'jhjkfsdg fdgdf sfds hgfj j kkjjfghgkjf hdkjtkj lfdjfg hkgfl @jhsad.sadas.com dsfjdshflkds kg lsfdkg;fdgl']; $posts['Author2']=['This is some random string representative of non-signature text. This is the *author\'s* signature.', 'Different message body text. This is the *author\'s* signature. This is an afterthought that expresses that a signature is not always at the end.', 'Finally, this is unwanted stuff. This is the *author\'s* signature.']; foreach($posts as $author=>$texts){ echo "Author: $author\n"; usort($texts,function($a,$b){return strlen($a)-strlen($b);}); // sort ASC by strlen; mb_strlen probably isn't advantageous var_export($texts); echo "\n"; foreach($texts as $index=>$string){ if(!$index){ $overlaps=preg_split('/\s+/',$string,NULL,PREG_SPLIT_NO_EMPTY); // declare with all non-white-space substrings from first text }else{ $overlaps=array_intersect($overlaps,preg_split('/\s+/',$string,NULL,PREG_SPLIT_NO_EMPTY)); // filter word bank using narrowing number of words } } var_export($overlaps); echo "\n"; // batch consecutive substrings $group=null; $consecutives=[]; // clear previous iteration's data foreach($overlaps as $i=>$word){ if($group===null || $i-$last>1){ $group=$i; } $last=$i; $consecutives[$group][]=$word; } var_export($consecutives); echo "\n"; foreach($consecutives as $words){ // match potential signatures in first text for measurement: if(preg_match_all('/\Q'.implode('\E\s+\Q',$words).'\E/',$texts[0],$out)){ // make alternatives characters literal using \Q & \E $potential_signatures=$out[0]; } } usort($potential_signatures,function($a,$b){return strlen($b)-strlen($a);}); // sort DESC by strlen; mb_strlen probably isn't advantageous echo "Assumed Signature: {$potential_signatures[0]}\n\n"; }
Output for git.master, git.master_jit, rfc.property-hooks
Author: Author1 array ( 0 => 'sdsadsad daSDA DDASd asd aSD Sd dA SD ASD sadasdasds sadasd @jhsad.sadas.com sdsdADSA sada', 1 => 'jhjkfsdg fdgdf sfds hgfj j kkjjfghgkjf hdkjtkj lfdjfg hkgfl @jhsad.sadas.com dsfjdshflkds kg lsfdkg;fdgl', 2 => 'KDJKLFFD GFDGFDHGF GFHGFDHGFH GFHFGH Lklfgfd gdfsgfdsg df gfdhgf g hfghghjh jhg @jhsad.sadas.com sfgff fsdfdsf', ) Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 30 Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 32 Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 32 array ( 11 => '@jhsad.sadas.com', ) array ( 11 => array ( 0 => '@jhsad.sadas.com', ), ) Assumed Signature: @jhsad.sadas.com Author: Author2 array ( 0 => 'Finally, this is unwanted stuff. This is the *author\'s* signature.', 1 => 'This is some random string representative of non-signature text. This is the *author\'s* signature.', 2 => 'Different message body text. This is the *author\'s* signature. This is an afterthought that expresses that a signature is not always at the end.', ) Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 30 Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 32 Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /in/AT6pF on line 32 array ( 2 => 'is', 5 => 'This', 6 => 'is', 7 => 'the', 8 => '*author\'s*', 9 => 'signature.', ) array ( 2 => array ( 0 => 'is', ), 5 => array ( 0 => 'This', 1 => 'is', 2 => 'the', 3 => '*author\'s*', 4 => 'signature.', ), ) Assumed Signature: This is the *author's* signature.

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
168.23 ms | 411 KiB | 5 Q