PHP 正则表达式 Get Text Between and inside 标签

PHP Regex Get Text Between and inside tags

提问人:Luiz Jr 提问时间:2/10/2023 更新时间:2/10/2023 访问量:112

问:

我在HTML代码上有这个标签:

text html [button link="google.com" color="#fff" text="this text here"] rest of html

我希望我能在PHP变量中拥有这个“按钮代码”的参数,但由于正则表达式,我不知道如何。

我尝试使用preg_match_all但没有成功。像这个:

preg_match_all('/color=(\w*)/i', $text, $color);

谢谢!

php 正则表达式 preg-replace preg-match

评论

0赞 RiggsFolly 2/10/2023
请澄清你想从该字符串中得到什么
1赞 Wiktor Stribiżew 2/10/2023
也许你想要 - 看看 3v4l.org/qMqXhif (preg_match_all('~(?:\G(?!^)|\[button)\s+(\w+)="([^"]*)"~', $text, $matches)) { print_r(array_combine($matches[1], $matches[2]));}
1赞 Barmar 2/10/2023
\w*与 color 属性中的字符不匹配。或者属性值两边的引号。#
2赞 MorganFreeFarm 2/10/2023
请提供预期的输出!
0赞 Luiz Jr 2/10/2023
我想准备好链接,对不起,我没有输入它。

答:

1赞 MorganFreeFarm 2/10/2023 #1

你可以使用 preg_match_all()

<?php

$text = 'text html [button link="google.com" color="#fff" text="this text here"] rest of html';
preg_match_all('/\[button link="(.*?)" color="(.*?)" text="(.*?)"\]/i', $text, $matches);
$link = $matches[1][0];
$color = $matches[2][0];
$text = $matches[3][0];

echo $link;
echo $color;
echo $text;

输出:

google.com
#fff
this text here
0赞 Luiz Jr 2/10/2023 #2

谢谢大家。我将发布对我有用的结果。也许它对别人有帮助!这些选项已经是我的语言葡萄牙语。但你可以理解!

我需要脚本来解决同一 HTML 中多个标签的代码。

$matches = [];
        preg_match_all('/\[botao link={(.*?)} texto={(.*?)} corfundo={(.*?)} corletra={(.*?)}\]/', $text, $matches);
        
        foreach($matches[0] as $key => $match) {
            $link = $matches[1][$key];
            $texto = $matches[2][$key];
            $corfundo = $matches[3][$key];
            $corletra = $matches[4][$key];
        
            $text = str_replace($match, '<a title="'.$texto.'" class="botao" href="'.$link.'" style="background-color: '.$corfundo.'; color: '.$corletra.';">'.$texto.'</a>', $text);
        }