Номер заменить шаблон проблемы с RegEx - PullRequest
2 голосов
/ 18 августа 2010

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

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

Мой шаблон соответствия: (.*-)(\d*)

Шаблон замены будет: $1[insert number here]$2

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

Я пропустил здесь управляющий символ?

Ответы [ 2 ]

3 голосов
/ 18 августа 2010

В 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'.)

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

1 голос
/ 18 августа 2010

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

(.*)-(\d*)

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

$1-[new number]

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

...