首页 > 解决方案 > 如何在每五次出现另一个字符串后插入字符串?

问题描述

我想使用 PHP 在字符的某个位置插入字符串,所以我有这样的字符串:

$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
    ";

我想[next]在每个 5 标签的倍数之后附加这个 bb 代码</p>,所以它会是这样的:

$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    [next] //appended bb code
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    [next] //appended bb code
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    [next] //appended bb code
    <p>16</p>
    <p>17</p>
    ";

我有一个案例,我有一篇文章需要在第五</p>,第十</p>,第十五</p>等之后进行分页。我尝试的是查找并获取每个位置的数量,并在第十段()时</p>附加bb 代码。这很好用。[next]</p>

$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
";
    $paginate = '[next]';
    $found = 0;
    
    for($i = 1; $i <= 99; $i++) {
        $paragraph = strpos($string, "</p>", $found);
        $found = $paragraph + 1;

        if ($i == 10) {
            $string = substr_replace($string, $paginate, $paragraph, 0);
        }
    }

    echo $string;

结果(输出):

1

2

3

4

5

6

7

8

9

10[next]

11

12

13

14

15

16

17

当我尝试每隔 5 个</p>标签的倍数附加该 bb 代码时,我正在苦苦挣扎,因此非常感谢任何帮助。

标签: phpreplace

解决方案


匹配直到第五个</p>标签的所有内容,然后用 忘记所有内容\K,然后注入您的 bbcode。

代码:(演示

echo preg_replace('~(?:.*?</p>){5}\K~s', "\n    [next]", $string);

如果你想要一个标签无知的模式,这里有一个:

~((^|\R).+){5}\K~

或完全尊重您系统的换行符序列:

echo preg_replace('~(?:.+\K\R){5}~', "$0    [next]$0", $string);

推荐阅读