정규표현식 질문 드립니다. 연속되는 글자 찾기

phw0317의 이미지

안녕하십니까!! perl 정규표현식에 대해서 질문이 있어서 이렇게 질문 올려봅니다.

다름이 아니고 지금 제가 일정 길이 이상되는 글자를 찾는 중인데요...

글자라기보다는 - <==이 문자라고 하겠습니다.

10개 이상 연속으로 일치하는가에 대해서 찾고싶다고 하면

$find=~/(-)\1{10,}/ig

이런식으로 찾는데 이때는

---------- ---- -- - - - -----------

위와 같은 문장에서는 2개가 일치를 하겠죠?

그런데 만약에 ------- ------ <이러한 (중간에 한칸이 공백이지만 공백을 뺀 나머지가 길이가 10이상일때)

글자도 인식을 했으면 좋겠는데 어떤 방식을 써야할지 궁금합니다...

답변 부탁드리겟습니다 ( _ _*

raymundo의 이미지

공백이 몇 개가 있어도 상관없다면 ("-- - -- - -- --" 이런 것도 매치되게)

/(-)(\s*\1){9,}/

위와 같이 하면 될 것 같고요 (본문에 쓰신 것도 10이 아니라 9여야 10개 이상이 되겠죠. 앞에 하나 이미 나왔으니)

공백이 없거나 하나 있는 경우만이라면... 음 이건 고민 좀 해봐야겠습니다. 공백의 앞과 뒤로 나눠서 생각한다면 모를까 정규식 하나만으로 간단히 하려면 어떻게 해야 될런지 잘 떠오르지 않네요.

좋은 하루 되세요!

phw0317의 이미지

공백이 하나있다는걸 보여주기위에서는 간단한 정규표현식으론 어려움이있겠죠?

조언 감사드립니다^^

raymundo의 이미지

뭔가 간단한 방법을 놓치고 있다는 느낌이 듭니다만...;;;;

my $str = "---------- ---- -- - - - -----------";
 
while ( $str =~ /(-{1,9})               # "-"가 1~9개 연속으로 있고
                 [ ]?                   # 공백이 있거나 없거나
                 (??{                   # 정규식 내에서 코드를 실행
                     "-{"               #   이건 그냥 스트링
                     .
                     (10 - length($1))  #   앞의 -덩어리의 길이를 10에서 뺌
                     .
                     ",}"               #   이것도 그냥 스트링
 
                                        # 만일 앞에 "-"가 4개 있었다면,
                                        # 이 안의 코드의 결과는
                                        # "-{6,}" 이 되고, 이걸 리턴해서
                                        # 전체 정규식에 합치니까
                                        # -{1,9}[ ]?-{6,}
                                        # 이라는 정규식이 임시로 구성됨
                     })
                /gx ) {                 
    print "[$&]\n";
}

실행결과:

[----------]
[- -----------]   <-- 이게 매치되는 게 원하시는 거죠?

정규식 안에서 코드를 실행하는 건 실험적인 기능이고 앞으로도 예고 없이 변경될 수 있다는군요. (perlretut 문서에서)

P.S. 요새 왜 "미리보기" 버튼을 눌러도 안 나올까요. 코드 블럭이 잘 나오나 확인하고 올리려했는데...

좋은 하루 되세요!

phw0317의 이미지

감사합니다, 뒤늦게봤네요^^;

정규표현식이 안될거같아 다른방법으로 시도했는데 이 방법도 시도해 보겠습니다 +_+

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.