<?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]
Любые намеки?
Попробуйте следующее:
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;
}
Надеюсь, это поможет :)
(?<=pattern)(\d+)[^\]]*
Попробуйте это. Замените его на $1
Прочтите демоверсию.
$p
на это, но оно выдает ошибку
[pattern1 This is my test [pattern1 String for [pattern3 Reg Ex [pattern2