Jump to content

Search the Community

Showing results for tags 'preg replace lookbehind'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Welcome to PHP Freaks
    • Announcements
    • Introductions
  • PHP Coding
    • PHP Coding Help
    • Regex Help
    • Third Party Scripts
    • FAQ/Code Snippet Repository
  • SQL / Database
    • MySQL Help
    • PostgreSQL
    • Microsoft SQL - MSSQL
    • Other RDBMS and SQL dialects
  • Client Side
    • HTML Help
    • CSS Help
    • Javascript Help
    • Other
  • Applications and Frameworks
    • Applications
    • Frameworks
    • Other Libraries
  • Web Server Administration
    • PHP Installation and Configuration
    • Linux
    • Apache HTTP Server
    • Microsoft IIS
    • Other Web Server Software
  • Other
    • Application Design
    • Other Programming Languages
    • Editor Help (PhpStorm, VS Code, etc)
    • Website Critique
    • Beta Test Your Stuff!
  • Freelance, Contracts, Employment, etc.
    • Services Offered
    • Job Offerings
  • General Discussion
    • PHPFreaks.com Website Feedback
    • Miscellaneous

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests


Age


Donation Link

Found 1 result

  1. Hi It seems I have finally arrived at a problem requiring regular expressions (never needed them before). It tried my best, but I could use some help. Simplified problem: I need to replace a word in a text, but with exceptions. If the word is between two specific (html) tags, I must not be replaced. Example: In the sentence below I need to make all words 'sun' bold, except the second one because it is somewhere between italics.: "The word sun must be bold. <i>But not this instance of sun, because it is between italics</i>. This sun though, should be bold again." So I went like this: $triggerword="sun"; $replace_with = "<b>sun</b>"; $string = "The sun must be bold. <i>But not this instance of sun because it is between italics</i>. This sun though, should be bold again."; This will make all instances of sun bold: preg_replace("/$triggerword/", $replace_with, $string); I figured I needed negative lookahead to spot the closing </i> tag: preg_replace("/$triggerword(?!.*<\/i>)/i", $replace_with, $string); That works. The first and second SUN are no longer bold as expected. Now a negative lookbehind to spot the opening <i> tag: preg_replace("/(?<!<i>.*)$triggerword(?!.*<\/i>)/i", $replace_with, $string); But that doesn't seem to work, apparantly because negative lookbehind may not be variable length. But I cannot use fixed length because the number of characters following the <i> tag ARE variable. So now I am kind of stuck. Any ideas? Part of me thinks I am missing the easy way out. I am also interested in a solution using a completely different method. Thanks in advance.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.