2014-04-07 2 views
2

문자열의 다른 부분을 모든 일치하는 그룹 안에있는 단어로 바꾸고 싶습니다. 나는이 문자열이있는 경우 그래서, :이 표현하려고자바 정규 표현식이 다른 그룹과 일치합니다

<td>id</td> 
<td>name</td> 
<td>id</td> 

:

<td>{$phrase->getId()}</td> 
<td>{$phrase['name']}</td> 
<td>{$phrase['id']}</td> 

나는 문자열을 얻을 수 있도록하고 싶습니다

\{\$\w+(?:\['(\w+)'\]|->get(\w+)\(\))\} 

을하지만 때 input.replace(regex, "$1") I 얻으십시오 :

<td></td> 
<td>name</td> 
<td>id</td> 

답변

3

r 이 같은 | 또는 운영자

을 사용했기 때문에 $1$2와 eplace : input.replace(regex, "$1$2");

Id 두 번째 캡처 그룹 내부오고 첫 문장에 대한, 따라서 그것은 첫 번째 일치하지 않습니다.

+0

나는 이것이 쉽지 않았다고 믿을 수 없다. 발견 한 대부분의 대답은'|'을 제거하겠다고 말하고 있었지만, 감사해야한다. –

+0

@ lulian 왜 내가 캡처하지 않은 그룹을 사용했는지 모르겠습니다. – aelor

+1

두 가지 변형을 번갈아 가며 사용할 수 있습니다. –

관련 문제