목차

replaceAll, replace

  • description : 정규표현식을 사용한 replaceall 활용 연구
  • author : 주레피
  • email : dhan@repia.com
  • lastupdate : 2020-04-14

Case study

1. 이미지 소스의 base64문자열 제거 (<img src=“data-image/png;base64, …….”/> → <img src=“”/>)

String testStr="<img src=\"data:image/png;base64,iVBORw0KGgo ... 5XTk8evT\">";
System.out.println(testStr.replaceAll("src=\"data:image[^\"]*\"", "src=\"\""));


2. http://www.repia.com → <a href=“http://www.repia.com” target=“blank”>www.repia.com</a>(링크추가)

String testStr="http://www.repia.com ";
System.out.println(testStr.replaceAll("(http(s)?://([^ ]*))", "<a href=\"$1\" target=\"blank\">$3</a>"));
괄호 순서대로
(http(s)?://([^ ]*)) ⇒ $1
(s) ⇒ $2
([^ ]*) ⇒ $3
// Source
public static void main(String[] args)
{
    String[] linkHostList = { "http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx="
                            , "https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn="
                            , "https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq=" };
 
    for(String linkHost: linkHostList) {
        System.out.printf("%s -> %s\n", linkHost, linkHost.replaceAll("(http(s)?://([^/]*)(/.*))", "$3"));
    }
}
// Output <= $3
http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx= -> www.sit.re.kr
https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn= -> scienceon.kisti.re.kr
https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq= -> www.kosen21.org
 
// Output <= $1
http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx= -> http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx=
https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn= -> https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn=
https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq= -> https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq=
 
// Output <= $2
http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx= -> 
https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn= -> s
https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq= -> s
 
// Output <= $4
http://www.sit.re.kr/kr/board/result/boardView.do?bbsIdx= -> /kr/board/result/boardView.do?bbsIdx=
https://scienceon.kisti.re.kr/srch/selectPORSrchTrend.do?cn= -> /srch/selectPORSrchTrend.do?cn=
https://www.kosen21.org/info/kosenReport/reportView.do?articleSeq= -> /info/kosenReport/reportView.do?articleSeq=


3. 한줄로 간단하게 ltrim, rtrim

String testStr=str.replaceAll("^\\s+",, ""); //ltrim
String testStr=str.replaceAll("\\s+$",, ""); //rtrim
'^' mean 처음부터 매칭
'$' mean 라인마지막 매칭
\\s+ mean white space


4. 특수 기호 사용하기
4.1 []로 싸주면 문자자체를 인식하는 것

* => [*]
+ => [+]
$ => [$]
| => [|]
? => [?]

4.2 \\를 붙여줘야 하는 것

( -> \\(
) -> \\)
{ -> \\{
} -> \\}
^ -> \\^
[ -> \\[
] -> \\]

4.3 나머지 기호 !#%&@':;-.<>,~` 는 괜찮은 것 같다.

String c = "?$(){}*+^|[]";
c = c.replaceAll("[?][$]\\(\\)\\{\\}[*][+]\\^[|]\\[\\]", "");

Ref

Tip

Troubleshooting