왕긍정
325
2018-07-12 23:29:25
4
116

정규표현식 질문있습니다.



자바에서 

String line = "xx+x+x+xx-xx+"

가 있을 때

1. line.split("+");
2. line.split("\\+");


1번과 2번의 차이는 뭔가요 ? 2번으로 해야 답이 나오고, 1번으로 하니까 dangling meta character 에러가 나네요 !

0
0
  • 답변 4

  • kenu
    41k
    2018-07-13 00:32:43 작성 2018-07-13 00:33:42 수정됨

    escape 라고 합니다.

    "(따옴표)로 표시된 문자열 안에 "를 표시하고 싶으면 \" 으로 표현하는 것이죠.

    String ex = "요즘 읽은 비개발 서적 \"82년생 김지영\" 보면서 귀남이가 생각났습니다.";

    Java에서의 문자열 예입니다.

    이런 경우 '\'를 escape문자라고 합니다.

    그런데, 자바에서 정규식은 두 번 연속 씁니다. (홍진호처럼)
    정규식에서 '+'는 다른 의미가 있습니다.

    They are called quantifiers.

    * 0 or more of the preceding expression

    + 1 or more of the preceding expression

    from: https://stackoverflow.com/questions/8575281/regex-plus-vs-star-difference

    그래서 + 문자를 escape 시켜야죠.



    0
  • 왕긍정
    325
    2018-07-13 08:08:37

    Kenu님


    좋은 답변 감사합니다. 그런데 저는 문자열에서 +나 -를 기준으로 split시키고 싶을 때 입니다. 


    30+20-40-20+30 이렇게 있을 때 split(“\\-“)하면

    30+20

    40

    20+30 

    이렇게 나오는데, 이것을 또 split으로 하나 하나 나눌 때 split(“\\+”) 이렇게 해야 에러가 안나고, split(“+”)라고 하니까 에러가 나는 부분이 궁금했습니다 ! 

    0
  • jjmean2
    45
    2018-07-13 08:29:52

    정규식에서 +는 특별한 의미로 쓰이는 메타문자로 앞에 있는 문자가 1개 이상 반복되는 경우와 매칭됩니다. 앞에 있는 문자가 있어야 의미가 있는 메타문자인데 혼자 쓰였으니까 dangling 메타문자라는 에러가 나는 것입니다. 메타문자를 특별한 의미가 아니라 문자 그대로와 매칭시키려면 이스케이프를 해야하고 이스케이프를 하는 방법이 앞에 \\ 를 붙이는 것입니다. - 의 경우에는 특별한 의미가 없는 평범한 문자이므로 이스케이프를 붙일 필요가 없습니다.

    0
  • 왕긍정
    325
    2018-07-13 19:41:04

    jjmean2님 ! 

    너무 좋은 답변입니다 ! 감사합니다 !! -를 뺐을 때 됐었는데 ! 그게 그 이유였네요 ! 

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.