Using PHP replace regex with regex

后端 未结 3 1825
没有蜡笔的小新
没有蜡笔的小新 2020-12-06 09:29

I want to replace hash tags in a string with the same hash tag, but after adding a link to it

Example:

$text = \"any word here related to #English mu         


        
相关标签:
3条回答
  • 2020-12-06 09:45

    This should nudge you in the right direction:

    echo preg_replace_callback('/#(\w+)/', function($match) {
        return sprintf('<a href="https://www.google.com?q=%s">%s</a>', 
            urlencode($match[1]), 
            htmlspecialchars($match[0])
        );
    }, htmlspecialchars($text));
    

    See also: preg_replace_callback()

    0 讨论(0)
  • 2020-12-06 09:46
    $input_lines="any word here related to #English must #be replaced.";
    preg_replace("/(#\w+)/", "<a href='bla bla'>$1</a>", $input_lines);
    

    DEMO

    OUTPUT:

    any word here related to <a href='bla bla'>#English</a> must <a href='bla bla'>#be</a> replaced.
    
    0 讨论(0)
  • 2020-12-06 10:00

    If you need to refer to the whole match from the string replacement pattern all you need is a $0 placeholder, also called replacemenf backreference.

    So, you want to wrap a match with some text and your regex is #\w+, then use

    $text = "any word here related to #English must #be replaced.";
    $text = preg_replace("/#\w+/", "<a href='bla bla'>$0</a>", $text);
    

    Note you may combine $0 with $1, etc. In case you need to enclose a part of the match with some fixed strings you will have to use capturing groups. Say, you want to get access to both #English and English within one preg_replace call. Then use

    preg_replace("/#(\w+)/", "<a href='path/$0'>$1</a>", $text)
    

    Output will be any word here related to <a href='path/#English'>English</a> must <a href='path/#be'>be</a> replace.

    0 讨论(0)
提交回复
热议问题