Design & Development, java

자바 정규식 예제

okjsp 에 올라온 정규식 문제를 가지고 좀 고민해보았다.

Q :
sdklfsdjf abc1c 2 3 s dadqqq sdlkfjslkjdfslkdjflk abcs f l ks jdfkjqqq sflksjdfk abcsd f sdfqqq sdfsf

이런 문자열이 있을 때

abc로 시작하면서 qqq로 끝나는 문자열들을 배열로 받고 싶어요

제가 원하는건
[0] abc1c 2 3 s dadqqq
[1] abcs f l ks jdfkjqqq
[2] abcsd f sdfqqq
이렇게 결과가 나와야 하는데

문제는 abc1c 2 3 s dadqqq sdlkfjslkjdfslkdjflk abcs f l ks jdfkjqqq sflksjdfk abcsd f sdfqqq

이렇게 나온다는거… -_-

A :
‘*’ or ‘+’ 같은 quantifier 는 패턴과 일치하는한 최대한 많은 문자를 취합니다( 영어로는 ‘greedy : 탐욕스러운, 게걸스러운’ 하다라고 표현하더군요 ) 그러므로 이 때는 ‘?’ 를 이용하여 non-greedy 하게 할 수 있습니다.( 여기 깔끔하게 정리되어 있네요. http://exampledepot.com/egs/java.util.regex/Greedy.html )

Pattern p = Pattern.compile(“abc.*?qqq”);

Q :
정규식으로 img src=이미지경로만 가져오는것 질문드립니다.

A :
검색해서 찾은 PHP 용으로 작성된 패턴을 Java 용으로 살짝 바꿔봤습니다.

Pattern p = Pattern.compile(“(?i)]*[src] *= *[\”\’]{0,1}([^\”\’\\ >]*)”);
Matcher m = p.matcher(str);

while(m.find()) {
System.out.println(m.group(1));
}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s