Case insensitive preg_replace_callback

前端 未结 5 1036
忘了有多久
忘了有多久 2021-01-26 03:48

In the function below, I want to match the keyword case insensitive (should match \"Blue Yoga Mats\" and \"blue yoga mats\")...

However, it currently only matches if the

相关标签:
5条回答
  • 2021-01-26 04:04

    Add the "i" modifier to your regexp:

    /\b($mykeyword)\b/i
    
    0 讨论(0)
  • 2021-01-26 04:08
    $post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);
    

    Use TOKENregexpTOKENi to perform case-insensitive searches.

    See Pattern Modifiers in the PHP manual for full details on modifiers.

    0 讨论(0)
  • 2021-01-26 04:10

    You can also use T-Regx library:

    <?php
    pattern('\b($mykeyword)\b')->replace($post->post_content)->callback('doReplace');
          // ↑ Delimiters are not required 
    

    Also, use of $mykeyword might cause user-input characters to break your pattern. With T-Regx you can use Prepared Patterns and just build your pattern:

    <?php
    $pattern = Pattern::inject("\b(@keyword)\b", [
        'keyword' => $mykeyword  
        // quoting unsafe characters
    ]);
    $pattern->replace($post->post_content)->callback('doReplace');
    
    0 讨论(0)
  • 2021-01-26 04:13

    Use the /i modifier:

    $post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);
    
    0 讨论(0)
  • 2021-01-26 04:26

    Simply add the i modifier to your regex to make it perform a case insensitive match:

    "/\b($mykeyword)\b/i"
    

    By the way, if you haven't already, you need to escape special regex characters from your keyword. In case any are present, they could screw up your regex and cause PHP warnings/errors. Call preg_quote() before you perform the replacement:

    $mykeyword_escaped = preg_quote($mykeyword, '/');
    $post->post_content = preg_replace_callback("/\b($mykeyword_escaped)\b/i","doReplace", $post->post_content);
    
    0 讨论(0)
提交回复
热议问题