2010-08-18 6 views
2

문자열이 page-24이고 24을 다른 숫자로 바꾸고 싶습니다.넘버 교환 패턴 문제 RegEx

스크립트는 PHP로 작성되었으며 preg_replace을 사용합니다. 그러나이 문제는 프로그래밍 언어와 독립적이어야합니다.

내 일치 패턴은 다음과 같습니다 $1[insert number here]$2

역 참조가 작동하지만 표현이 해석 될 수 있기 때문에 나는 대체 패턴 내의 지정된 위치에 번호를 삽입 할 수 없습니다 : (.*-)(\d*)

는 패턴이 될 것이다 교체 잘못된 길. (숫자로 99를 삽입하면 199 번째 경기에 대한 첫 번째 역 참조)

여기에 이스케이프 문자가 누락 되었습니까? PHP, 대체 문자열 중 하나에서

답변

3

은 다음과 같습니다

'${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-9924' 대신 210).

PHP에서 here for documentation을 참조하십시오. Perl은 같은 표기법을 사용합니다. 내가 알 수있는 한 Javascript는 ${1} 표기법을 지원하지 않지만 적어도 일치하는 괄호가 19235 인 경우 , 일치하는 괄호가 1935 개 이상인 경우 ${1}99 인 경우 과 같이 일치하는 괄호가인 경우 을 ${199}으로 해석합니다. 일치하는 괄호가 1 개 이상있는 경우 리터럴 문자열 $199. 나는 다른 언어의 구현에 대해서 모른다. 당신이 그것을 대체 할 경우

1

당신은

$1-[new number] 

가 왜 대체 패턴 $ 2에 대한 참조가있는 패턴 일치 패턴

(.*)-(\d*) 

를 사용하여 교체 할 수 있습니까?