2010-08-18 2 views
2

У меня есть строка page-24 и хочу заменить 24 любым другим номером.Номер заменяет шаблон с RegEx

Сценарий написан на PHP и использует preg_replace, однако эта проблема должна быть независимой от языка программирования.

Мой шаблон матча: (.*-)(\d*)

ЗАМЕНИТЬ шаблон будет: $1[insert number here]$2

В обратные_связи работать, но я не могу вставить номер в заданное место в замене шаблона, поскольку выражение будет интерпретироваться неправильный путь. (Первое обратное отношение к 199-му совпадению, если я вставил 99 в качестве номера.)

Я пропустил здесь символ побега?

ответ

3

В PHP, заменяющей строки либо выглядит следующим образом:

'${1}[insert number here]$2' 

Или как это (если он находится в двойных кавычках):

"\${1}[insert number here]$2" 

Пример:

$s = 'page-24'; 
$out = preg_replace('/(.*-)(\d*)/', '${1}99$2', $s); 
echo "out is $out"; //prints 'page-9924' 

(Вы, вероятно, просто хотите ${1}99, что дало бы 'page-99', а не 'page-9924'.)

См. here for documentation в PHP. Perl использует те же обозначения. Javascript, насколько я могу судить, не поддерживает нотацию ${1}, но он будет интерпретировать $199 как ${199}, если имеется как минимум 199 соответствующих скобок, так как ${19}9, если имеется по меньшей мере 19 совпадающих парен и ${1}99, если есть минимум 1 совпадающий паттерн или литеральная строка $199, если совпадений нет. Я не знаю о реализации других языков.

1

Вы можете использовать шаблон

(.*)-(\d*) 

матч и заменить шаблон

$1-[new number] 

Почему есть ссылка на $ 2 в замене шаблона, если вы хотите заменить его?

Смежные вопросы