모두 :variable
(로 시작하는 단어 :
)를 ${variable}$
.
예를 들면
:aks_num
와 ${aks_num}$
:brn_num
와 ${brn_num}$
다음은 작동하지 않는 내 코드입니다.
public static void main(String[] argv) throws Exception
{
CharSequence chSeq = "AND ((:aks_num = -1) OR (aks_num = :aks_num AND ((:brn_num = -1) OR (brn_num = :brn_num))))";
// replaceAll also not working
//String s = chSeq.replaceAll(":\\([a-z_]*\\)","\\${ $1 \\}$");
Pattern p = Pattern.compile(":\\([a-z_]*\\)");
Matcher m = p.matcher(chSeq);
if (m.find()) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}
쉘 스크립트에서 다음 정규식은 완벽하게 작동합니다.
s/:\([a-z_]*\)/${\1}$/g
:\\([a-z_]*\\)
(이스케이프 된 괄호 포함)은 :(aks_num)
. 분명히 입력 문자열에는 그러한 표현이 없습니다. 그것이 일치하는 것이없는 이유를 설명합니다.
대신 일부 변수를 캡처하기 위해 괄호를 사용하려는 경우 괄호를 이스케이프하면 안됩니다.
예 :
CharSequence chSeq = "AND ((:aks_num = -1) OR (aks_num = :aks_num AND ((:brn_num = -1) OR (brn_num = :brn_num))))";
Pattern p = Pattern.compile(":([a-z_]*)");
Matcher m = p.matcher(chSeq);
while (m.find()) {
System.out.println("Found value: " + m.group(0)+". Captured : "+m.group(1));
}
산출:
Found value: :aks_num. Captured : aks_num
Found value: :aks_num. Captured : aks_num
Found value: :brn_num. Captured : brn_num
Found value: :brn_num. Captured : brn_num
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다