- $pos = strpos($matches[0],$matches['url']);
- $left = substr($matches[0],0,$pos);
- $right = substr($matches[0],$pos+strlen($matches['url']));
+ $url=$matches['url'];
+ $left = strpos($matches[0],$url);
+ $right = $left+strlen($url);
+
+ $groupSymbolSets=array(
+ array(
+ 'left'=>'(',
+ 'right'=>')'
+ ),
+ array(
+ 'left'=>'[',
+ 'right'=>']'
+ ),
+ array(
+ 'left'=>'{',
+ 'right'=>'}'
+ )
+ );
+ $cannotEndWith=array('.','?',',','#');
+ $original_url=$url;
+ do{
+ $original_url=$url;
+ foreach($groupSymbolSets as $groupSymbolSet){
+ if(substr($url,-1)==$groupSymbolSet['right']){
+ $group_left_count = substr_count($url,$groupSymbolSet['left']);
+ $group_right_count = substr_count($url,$groupSymbolSet['right']);
+ if($group_left_count<$group_right_count){
+ $right-=1;
+ $url=substr($url,0,-1);
+ }
+ }
+ }
+ if(in_array(substr($url,-1),$cannotEndWith)){
+ $right-=1;
+ $url=substr($url,0,-1);
+ }
+ }while($original_url!=$url);
+
+