Parhs Posted December 15, 2008 Share Posted December 15, 2008 Hello i am trying to remove a custom tag from the file but it doesnt work... example jfsajdfjsdlfdsa<if test=0>word</if>fejjkfewkfjewkfjkewjfk should remove all the <if test=0>word</if> i tried many things..This for example scr*s the output.It prints nothing... echo preg_replace("/<if test=0>(.)*<\/if>/m","","<if test=0>pahoulo</if> <if test=1>pahoulo</if>"); Please help.. Quote Link to comment https://forums.phpfreaks.com/topic/137120-remove-only-a-tag-and-all-its-contents/ Share on other sites More sharing options...
.josh Posted December 16, 2008 Share Posted December 16, 2008 /<if.*?if>/ edit: Oh my bad. I guess I read that wrong or maybe you could have been clearer or both. Didn't notice you wanted to differentiate test=0 from test=1 Problem with your regex is that your * quantifier is being greedy and not stopping until the last </if>. You need to tell it to not be greedy and stop gobbling up stuff when it reaches first match. You do that by following it with a question mark ?. Also, you do not need parenthesis around the dot, since it's only one character and you don't need to capture it. /<if test=0>.*?<\/if>/m Quote Link to comment https://forums.phpfreaks.com/topic/137120-remove-only-a-tag-and-all-its-contents/#findComment-716328 Share on other sites More sharing options...
Parhs Posted December 16, 2008 Author Share Posted December 16, 2008 Thank you for the reply.That works. But i need some further help.. I want to replace all the tags <if test=0>content</if> with nothing.That means i want to erase them. If <if test=1>content</if> then replace that with content. Your regex works fine but if there are nested tags it becomes a mess. <if test=1>pasok <if test=0>b</if> <if test=1>a</if> s</if> So the only solution i think is to replace the most inner tags first and repeat the preg_replace. But i cant find any good regex. echo preg_replace("/<if test=0>(.)*?(?!<if)(.)*?<\/if>/s","",$pap,1); this for example wouldnt work because for example <if test=0>b</if> wouldnt match because after that there is an <if test=1>a</if> any help apreciated Quote Link to comment https://forums.phpfreaks.com/topic/137120-remove-only-a-tag-and-all-its-contents/#findComment-716508 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.