php - preg_replace with pattern and html tags not working -


i have this:

<span style="color:#ff8c00;"><strong>benjamin franklin</strong></span> or <span style="color:#ff8c00;"><strong><em>benjamin franklin</em></strong></span> or <span style="color:#ff8c00;">benjamin franklin</span> 

i need returns:

[color=#ff8c00]<strong>benjamin franklin</strong>[/color] [color=#ff8c00]<strong><em>benjamin franklin</em></strong>[/color] [color=#ff8c00]benjamin franklin[/color] 

i have pattern in php

~<span\s[^>]*\bstyle=[\'\"]color\:([\#a-za-z0-9\(\)\,]+)\;[\'\"]>([\<a-z0-9\>]+)(.+?)\s([\<\/a-z0-9\>]+)<\/span>~is 

but not works well, allthough in regexr show works http://regexr.com/3bjis

this returns me in php:

[/[color=#benjamin franklin 

php

$text = preg_replace(     array(         '~<span\s[^>]*\bstyle=[\'\"]color\:([\#a-za-z0-9\(\)\,]+)\;[\'\"]>([\<a-z0-9\>]+)(.+?)([\<\/a-z0-9\>]+)<\/span>~is',         ),     array(       '[color=$1]$2$3$4[/color]',     ), ltrim($text));  echo $text; 

regards.

edit: question different, pattern works in regexr link above posted, in php echoing returns incorrectly, not resort using xpath.

it wasn't easy may want.

'<span.+?style=(\'|\")color\:(.+?)\1[^>]*>(.+?)(?=\<\/span\>)<\/span>' 

and replacement

'[color=$2]$3[/color]' 

https://regex101.com/r/re1or3/4

to explain

  • \<span match literal
  • .+? match non-greedy
  • style= match literal
  • (\'|\") match single or double quote, capture group 1 we'll use latter
  • `color: match literal
  • (.+?) match , capture non-greedy
  • \1 backrefrence quote style matched
  • [^>]* match ( including empty ) not >
  • > match literal
  • (.+?) match , capture non-greedy
  • (?=\<\/span\>) positive lookahead anchors non-greedy match, style= or \1 bits makes sure matches first </span> encounters.
  • <\/span> match literal

Comments

Popular posts from this blog

php - Admin SDK -- get information about the group -

dns - How To Use Custom Nameserver On Free Cloudflare? -

Python Error - TypeError: input expected at most 1 arguments, got 3 -