获取已知字符串的定界符

时间:2019-04-14 15:57:49

标签: php regex preg-replace

我想检索构成已知字符串的字符串。我正在使用preg_replace,因为我还需要用另一个字符串替换已知的字符串。

示例: 字符串:<li class="testing" id="testing">$$</li> 我想得到的是:<li class="testing" id="testing"></li>

示例²: 字符串erzg^esdbdf$$abcdefg 我想得到的是:erzg^esdbdfabcdefg

这是我当前的代码,该代码不起作用:

$pattern = '/{{json: ' . $key . ', (.*)$$(.*)}}/';

两个定界符可以是HTML标记,也可以是其他任何标记。

这是我的完整代码:

    public function parse_config()
    {
        $data = Helpers::theme_config('default');
        $keys = [];

        if(!$data or !$data['extra'][0])
            return false;

        $pattern = '/{{json: (.*),/';
        preg_match($pattern, $this->htmlFile,$m);

        foreach ($m as $key => $value)
            if(($key - 1) % 2  == 0)
                $keys[] = $value;

        foreach ($keys as $key) {
            $pattern = '/{{json: ' . $key . ', (.*)$$(.*)}}/';
            $replace = '';

            foreach ($data['extra'][0][$key] as $value)
                $replace .= ' $1 ' . $value . ' $2 ';
            preg_replace($pattern, $replace, $this->htmlFile);
        }
    }

({Helpers::theme_config返回已解析的JSON文件的表)

除了 preg_replace 之外,

一切正常正常。我尝试过在线Regex在线直播,但我的模式没有发现任何问题...

我的目标是让这两个定界符构成一些新值。

我希望有人知道我的图案出了什么问题

谢谢。

2 个答案:

答案 0 :(得分:0)

如果我没有误解您的要求,只需执行explode()implode()即可完成您的工作。让我们这样尝试吧-

<?php
$string = '<li class="testing" id="testing">$$</li>';
$parts = explode("$$",$string);
print_r($parts);  // if wants result as 2 parts
echo implode(',', $parts); // if want result to concatenate it with comma as an string  
?>

演示: https://3v4l.org/uXmgZ

答案 1 :(得分:0)

感谢您的回答,我实现了一种方法来完成我想做的事情。我不知道它是否经过优化,但是我们可以:

    public function parse_config()
    {
        $data = Helpers::theme_config('default');
        $keys = [];

        if(!$data or !$data['extra'][0])
            return false;

        $pattern = '/{{json: (.*),/';
        preg_match_all($pattern, $this->htmlFile, $m);

        foreach ($m[1] as $key => $value)
            $keys[] = $value;

        foreach ($keys as $key) {
            $pattern = '/{{json: ' . $key . ', (.*)}}/';
            preg_match($pattern, $this->htmlFile, $m);

            foreach ($m as $i => $value) {
                if (($i - 1) % 2 == 0) {
                    $delimiters = [];
                    $replace = '';

                    $delimiters[] = explode("{{var}}", $value);

                    foreach ($data['extra'][0][$key] as $v)
                        $replace .= implode($v, $delimiters[0]);

                    $this->htmlFile = preg_replace($pattern, $replace, $this->htmlFile);
                }
            }
        }
    }

非常感谢您的帮助,
喜欢Stackoverflow,
加布里埃尔。