我想检索构成已知字符串的字符串。我正在使用preg_replace
,因为我还需要用另一个字符串替换已知的字符串。
示例:
字符串:<li class="testing" id="testing">$$</li>
我想得到的是:<li class="testing" id="testing">
和</li>
示例²:
字符串erzg^esdbdf$$abcdefg
我想得到的是:erzg^esdbdf
和abcdefg
这是我当前的代码,该代码不起作用:
$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在线直播,但我的模式没有发现任何问题...
我的目标是让这两个定界符构成一些新值。
我希望有人知道我的图案出了什么问题
谢谢。
答案 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
?>
答案 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,
加布里埃尔。