【问题标题】:PHP regex - replace all text between a tagPHP regex - 替换标签之间的所有文本
【发布时间】:2016-06-17 17:21:35
【问题描述】:

我的网站上输出了一个链接,我想做的是替换用户看到的可见文本,但链接将始终保持不变。

会有很多不同的动态 url 伴随着文本被改变,所以到目前为止我发现的所有示例正则表达式都只使用精确的标签,比如 '/.*/'...或类似的东西

为更好的例子编辑

$link = '<a href='some-dynamic-link'>Text to replace</a>';
$pattern = '/#(<a.*?>).*?(</a>)#/';
$new_text = 'New text';
$new_link = preg_replace($pattern, $new_text, $link);

打印输出时,以下是我正在寻找的,与我的结果相反。

想要的

<a href='some-dynamic-link'>New text</a>

实际

'New text'

【问题讨论】:

  • 问题出在哪里?
  • 您的 PHP 用途是什么?如果不使用 s 修饰符,. 不匹配换行符。您可能还想使用解析器。
  • 问题在于这是替换整个标签并删除
  • 您可能需要将捕获组添加回替换值。如果没有使用 PHP,我们不知道你在做什么..

标签: php regex


【解决方案1】:

既然您已经在使用捕获组,为什么不实际使用它们。

$link = "<a href='some-dynamic-link'>Text to replace</a>";
$newText = "Replaced!";
$result = preg_replace('/(<a.*?>).*?(<\/a>)/', '$1'.$newText.'$2', $link);

【讨论】:

    【解决方案2】:

    如果您需要在标签之间获取所有内容,则可以使用以下函数

    <?php
        function getEverything_inBetween_tags(string $htmlStr, string $tagname)
        {
            $pattern = "#<\s*?$tagname\b[^>]*>(.*?)</$tagname\b[^>]*>#s";
            preg_match_all($pattern, $htmlStr, $matches);
            return $matches[1];
        }
        $str = '<a href="test.com">see here for more details about test.com</a>';
        echo getEverything_inBetween_tags($str, 'a');
    
       //output:- see here for more details about test.com
    ?>
    

    如果您需要提取 HTML 标签并获取该标签的数组

    <?php 
        function extractHtmlTag_into_array(string $htmlStr, string $tagname)
        {
            preg_match_all("#<\s*?$tagname\b[^>]*>.*?</$tagname\b[^>]*>#s", $htmlStr , $matches);
            return $matches[0];
        }
    
        $str = '<p>test</p><a href="http://test.com">test.com</a><span>testing string</span>';
        $res = extractHtmlTag_into_array($str, 'a');
        print_r($res);
    
       //output:- Array([0] => "<a href="https://www.amazon.in/Amazon-Brand-Solimo-liner-brush/dp/B08GLHM9SF?=&amp;src=test.in&amp;=&amp;=">amazon.in/xyz/abc?test=abc</a>") 
    ?>
    

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多