Php preg_如何替换回调增量和替换?

Php preg_如何替换回调增量和替换?,php,preg-replace-callback,Php,Preg Replace Callback,我一直试图理解preg_replace_回调是如何工作的,但我就是不明白 比如说,我从navigation.php获取_内容。 其中有一堆a href和div,我想在每个a href之前为它们提供增量ID并添加一些代码注释。 我如何循环所有这些内容,使它们都增加并添加ID和注释 <?php $string = file_get_contents("navigation.php"); $i = 1; $replace = "<a "; $with = '<!-- UNIT'.$i

我一直试图理解preg_replace_回调是如何工作的,但我就是不明白

比如说,我从navigation.php获取_内容。 其中有一堆a href和div,我想在每个a href之前为它们提供增量ID并添加一些代码注释。 我如何循环所有这些内容,使它们都增加并添加ID和注释

<?php
$string = file_get_contents("navigation.php");
$i = 1;
$replace = "<a ";
$with = '<!-- UNIT'.$i.' --><a id=a_'.$i;
$replace2 = "<div ";
$with2 = '<div id=b_'.$i;
preg_replace_callback()
$i++

?>

你有多个目标,在我看来,实现这些目标最简单的方法就是一步一步地去做

1。正则表达式

您需要两个HTML标记,可以通过
/(,
g
修饰符仅用于证明它正确匹配)轻松捕获这些标记

有了它,您可以编写以下代码:

$parsed = preg_replace_callback('/(<a|<div)/i', ???, $string);
$parsed = preg_replace_callback("/(<a|<div)/", function($match) use (&$id) {
    switch ($match[1]) {
        case '<div':
            $result = '<div id="b_'.$id.'"';
            break;
        case '<a':
            $result = '<!-- UNIT'.$id.' --><a id="a_'.$id.'"';
            break;
        default:
            $result = $match[1];//do nothing
            break;
    }
    $id++;

    return $result;
}, $string);

观看它的运行。

如果您希望获得答案,请添加示例字符串和您想要获得的内容。我已更新以反映传入和传出的示例W,感谢您提供了伟大的示例!那会有很大帮助。还有一个问题,我如何包含通配符方面的内容?以p标签为例…如果我有一个应该适用于此,那么您也需要将此案例添加到交换机中
$parsed = preg_replace_callback('/(<a|<div)/i', ???, $string);
switch ($found) {
    case '<div':
        $result = '<div id="b_'.$id.'"';
        break;
    case '<a':
        $result = '<!-- UNIT'.$id.' --><a id="a_'.$id.'"';
        break;
    default:
        $result = "";
        break;
}
$parsed = preg_replace_callback("/(<a|<div)/", function($match) use (&$id) {
    switch ($match[1]) {
        case '<div':
            $result = '<div id="b_'.$id.'"';
            break;
        case '<a':
            $result = '<!-- UNIT'.$id.' --><a id="a_'.$id.'"';
            break;
        default:
            $result = $match[1];//do nothing
            break;
    }
    $id++;

    return $result;
}, $string);