Заменить номер в RegEx на тот же номер

0
<?php
function rg($str) {
    $p = '/\[pattern[0-9]\:[a-zA-Z]{3,10}\]/';
    $r = '[pattern[0-9]]';
    $str = preg_replace($p, $r, $str);
    return $str;
}

$s = "[pattern1:reverse] This is my test [pattern1:shift] String for [pattern3:nitro] Reg Ex [pattern2:reverse]";

echo rg($s);

Результатом этого будет

[pattern[0-9]] This is my test [pattern[0-9]] String for [pattern[0-9]] Reg Ex [pattern[0-9]]

Однако я пытаюсь заменить число, связанное с шаблоном, как есть. Таким образом, результат будет примерно таким:

[pattern1] This is my test [pattern1] String for [pattern3] Reg Ex [pattern2]

Любые намеки?

Теги:

2 ответа

1
Лучший ответ

Попробуйте следующее:

function rg($str) {
    $p = '/(\[pattern[0-9])\:[a-zA-Z]{3,10}\]/';
    $r = '$1]'; # $1 contains what tou will catch inside the  paranthesis
    $str = preg_replace($p, $r, $str);
    return $str;
}

Надеюсь, это поможет :)

  • 1
    $ r не используется и может быть опущено в вашем примере
  • 0
    Хорошее решение, НО закрывающая скобка отсутствует ... хотя: output: - [pattern1 This is my test [pattern1 String for [pattern3 Reg Ex [pattern2
Показать ещё 2 комментария
0
(?<=pattern)(\d+)[^\]]*

Попробуйте это. Замените его на $1 Прочтите демоверсию.

http://regex101.com/r/iZ9sO5/4

  • 0
    спасибо, но на самом деле не понял, куда мне это положить ... ваша ссылка показывает, что это работает, я заменил $p на это, но оно выдает ошибку
  • 0
    @JhilkeDai какую ошибку ты получаешь
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню