[완료]정규식 짜는 것좀 도와 주실수 있으신가요?

sitan81의 이미지

aaaa(bbb, [ { ccc: '123', ddd: '추출할곳1'}, { cccc: '123', ddd: '추출할곳2'} ]);

위에 나온 내용을 정규식을 사용해

추출할곳1 과 추출할곳2를 추출하여

최종적으로

추출할곳1, 추출할곳2
와 같이 만들고 싶습니다.
추출할곳 양쪽에 ' ' 은 추출하지 않았으면 좋겠습니다.

이렇게 저렇게 정규식을 공부하면서 만들어 보아도 도저히 뽑아 지지가 않아서 답답해 도움을 요청합니다.

사용언어는 자바를 사용하겠지만

굳이 자바가 아니더라도 정규식을 사용해 저부분을 추출하는 방법이 알고 싶습니다.

감사합니다.

gilgil의 이미지

ddd:'(*)^'.*ddd:'(*)^'

이렇게 하면 되지 않을까요?

송효진의 이미지

[] 만 보면 딱 json 인데 json_decode 해서 [0].ddd, [1].ddd 로 가져와도 좋을 것 같네요.

/ddd:'(.*?)'.*?ddd:'(.*?)'/

terzeron의 이미지

/ddd:\s*'([^']*)'.*ddd:\s*'([^']*)'/이 더 안전할 것 같습니다.

sitan81의 이미지

계속 해서 찾을수 없다고 나오네요..

String str = "aaaa(bbb, [ { ccc: '123', ddd: '추출할곳1'}, { cccc: '123', ddd: '추출할곳2'} ]);";

Pattern p = Pattern.compile("/ddd:\\s*'([^']*)'.*ddd:\\s*'([^']*)'/");
Matcher m = p.matcher(str);

System.out.println(m.matches());

위와 같은 코드를 돌려보면
계속 해서 false가 나옵니다.

음... 제가 애초에 접근을 잘못하고 있는건가요?

위에 알려주신 3가지 패턴

/ddd:'(.*?)'.*?ddd:'(.*?)'/

ddd:'(*)^'.*ddd:'(*)^'

/ddd:\s*'([^']*)'.*ddd:\s*'([^']*)'/

모두 사용해 보았으나 여전히 false 입니다...

익명 사용자의 이미지

String str = "aaaa(bbb, [ { ccc: '123', ddd: '추출할곳1'}, { cccc: '123', ddd: '추출할곳2'} ]);";
Pattern p = Pattern.compile("ddd:\\s*'([^']*)'");
Matcher m = p.matcher(str);

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

결과:
ddd: '추출할곳1'
ddd: '추출할곳2'

sitan81의 이미지

답변 해주신 방법 대로 하니 잘 되는군요!!!

급한마음에 시야가 좁아져 답변 주신글이 마치 제가 단것으로 착각하여 읽지 못하다가

답을 찾고 나서야 보이네요
진작에 이글을 보았더라면 더 빨리 해결할수 있었겠네요

감사합니다.

neocoin의 이미지

http://rubular.com/r/oSimGSl1dc

하지만 위에다른 분이 말씀하셨지만, 그냥 JSON 이면 파싱하세요.

sitan81의 이미지

답변주신 모든 분들께 감사드립니다.

해당 문제는 잘 해결되었습니다.

정규식에는 문제가 없었네요.

자바에서
Matcher.matches() 로만 정규식의 매칭되는 부분을 찾아아 되는줄 알았는데

정확히는 모르겠찌만
Matcher.find()로 해보니 잘 찾고 추출이 되더군요.

위에 분의 조언대로 JSON형태로 파싱 하는것도 가능하겠으나 시도해보지 않았던 이유는
매번 어렵다는 이유로 미뤄 왔던 정규식을 꼭한번 성곡 해보고 싶었습니다.

다시한번 감사드립니다.

이응준의 이미지

정규식은 튜링 완전하지 않은 것으로 알려져 있습니다. http://www.perlmonks.org/?node_id=809842

즉, 정규식으로 JSON을 파싱하는 것은 매우 어려울 수 있습니다.

현재의 테스트케이스에서 문제가 없는 정규식을 발견하셨다고 할지라도 {a: 'hello, \'world\'!'} 과 같이 이스케이핑이 사용된 경우는 잘 처리되지 않을 가능성이 높습니다.

sitan81의 이미지

이곳의 룰을 잘모르겠으나

답변이 완료된 글에는 [완료] 라고 통상 표시해주는것으로 보이는데
아무리 찾아도 수정버튼을 찾기가 힘드네요

혹시 [완료] 표시를 하는방법을 알려주시면 완료 표시 하겠습니다.

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.