For loop regex中的两个regex测试

For loop regex中的两个regex测试,for-loop,preg-replace,preg-match-all,For Loop,Preg Replace,Preg Match All,现在我在赛前遇到了一个问题 这是一个示例字符串:“!asksheet!H69=var8949”,此行中也可以有多个var8949或H69索引。结果应为“var33333=var8949” 这是我的部分: preg_match_all('#\b\!(.*)\![A-Z]{1,3}\d+\b#', $output, $matches2); foreach ($matches2[0] as $match2) { $result6 = $db->query("SELECT vari

现在我在赛前遇到了一个问题

这是一个示例字符串:“!asksheet!H69=var8949”,此行中也可以有多个var8949或H69索引。结果应为“var33333=var8949”

这是我的部分:

  preg_match_all('#\b\!(.*)\![A-Z]{1,3}\d+\b#', $output, $matches2);
  foreach ($matches2[0] as $match2) {
    $result6 = $db->query("SELECT varid FROM variablen WHERE varimportedindex = '".$match2."' AND projectid = $pid AND varsheetname LIKE '%".$match2."%' ");
    $rowoperation2 = $result6->fetch_assoc();
    if ($rowoperation2['varid'] != "" AND $rowoperation2['varid'] != "0") {
        $output2 = preg_replace("#\b\!(.*)\![A-Z]{1,3}\d+\b#", "var".$rowoperation2['varid']."", $output);
    }
  }
也许有人能帮忙吗

谢谢,, 当做
Olaf

为什么不使用简单的
preg\u match
而不是preg\u match\u all,您不需要单词边界,也不需要转义感叹号,您要查找的字符串在第1组和第2组中:

$str = '"!asksheet!H69=var8949"';
preg_match('#!(.*?)!([A-Z]{1,3}\d+)#', $str, $m);
print_r($m);
输出:

Array
(
    [0] => !asksheet!H69
    [1] => asksheet
    [2] => H69
)

在你的示例字符串中没有这样的值
var33333
,为什么它应该出现在结果中?它是从db查询的,只有一个示例值。我不知道解决方案,-1是什么意思?我如何从preg#u match_all('.\b\!(.*)![A-Z]{1,3}\d+\b#',$output,$matches2)中获取这两个正则表达式值;第一个是“asksheet”,第二个是“H69”,但我怎么能查询它们呢?@OlafK。你似乎认为托托的回答很有帮助,但你没有给它绿色的记号,这意味着你的问题已经完全解决了。如果问题得到解决,选择Toto的答案作为“接受答案”。否则,你有责任解释为什么你的问题不能通过对托托回答的评论或对你的问题的编辑来解决。请尽你所能及时寻求解决方案。