【问题标题】:preg_replace only if searchstring is not a link [duplicate]仅当 searchstring 不是链接时 preg_replace [重复]
【发布时间】:2019-11-13 11:18:36
【问题描述】:

我想替换包含 HTML 字符的文本字符串中的某个单词。所以这就是这个词变成了一个链接。

所以,例如当我得到这个字符串时

    Text I get: Lorem ipsum dolor sit amet

我希望它是这样的

    Result: Lorem <a href="url">ipsum</a> dolor sit amet

我已经在最后用函数存档了。

但如果我得到的字符串已经有链接

    Text I get: Lorem <a href="url">ipsum</a> dolor sit amet

变成这样

    Result: Lorem <a href="url"></a> <a href="url">ipsum</a> dolor sit amet

我的函数看起来像这样。

function replaceStrings($string) {

$arrCounter = 0;
$arrString = array();

if( have_rows('options_links_repeater', 'option') ):
    while( have_rows('options_links_repeater', 'option') ): the_row();
        $replacetext = get_sub_field('options_links_repeater_text', 'option');
        $replacelink = get_sub_field('options_links_repeater_links', 'option');
        $arrString[$arrCounter]["text"] = $replacetext;
        $arrString[$arrCounter]["link"] = $replacelink;
        $arrCounter++;
    endwhile;
endif;

$length = count($arrString);

for ($i = 0; $i < $length; $i++) {

    $searchString = $arrString[$i]["text"];

    $url = $arrString[$i]["link"];
    $urlLink = $arrString[$i]["link"]['url'];
    $urlLinkText = $arrString[$i]["link"]['title'];
    $urlLinkTarget = $arrString[$i]["link"]['target'] ? $arrString[$i]["link"]['target'] : '_self';


    $string = preg_replace('/'.$searchString.'\b/', '<a href="'.$urlLink.'" target="'.$urlLinkTarget.'">'.$searchString.'</a>', $string);
}

echo $string;

  }

我认为现在唯一重要的部分是 preg_replace。

你能帮我解决这个问题吗?所以如果这个词已经是一个链接,那么这个词就不会被替换。

编辑: 感谢您提供链接 @bobble-bubble。该线程中接受的答案对我有帮助:preg_replace to exclude <a href='''></a> PHP

这个 preg_replace 现在对我有用

    $string = preg_replace("~<a[^>]*>.*?</a\s*>(*SKIP)(*FAIL)|\b".$searchString."\b~", '<a href="'.$urlLink.'" target="'.$urlLinkTarget.'">'.$searchString.'</a>', $string);

【问题讨论】:

  • 检查是否已经有一个'

标签: php html regex string


【解决方案1】:

你可以用消极的眼神,Demo

echo preg_replace('/(?<!>)(ipsum)/',"<a href='url'>$1</a>",$string).PHP_EOL;

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2012-04-01
    • 2020-12-21
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多