펄의 정규표현식에서 어디가 잘못됬는지 모르겠군요..

lkjt의 이미지

대상 문자열 : "[bciu_cr=red] HI [/]"
정규 표현식 : "/\[([bciu]*(_cr=.+?|)(_lk=.+?|))\](.+?)\[\/\]/i"
출력 : "\\1<br>\\2"

그러나 출력은 이럿습니다.
bciu_cr=red
_cr=red

PHP의 펄호환 정규 표현식 입니다.

\\2에는 HI 라고 나와야 하는데,,, 어디가 잘못된거죠..?

김정균의 이미지

lkjt wrote:
대상 문자열 : "[bciu_cr=red] HI [/]"
정규 표현식 : "/\[([bciu]*(_cr=.+?|)(_lk=.+?|))\](.+?)\[\/\]/i"
출력 : "\\1<br>\\2"

그러나 출력은 이럿습니다.
bciu_cr=red
_cr=red

PHP의 펄호환 정규 표현식 입니다.

\\2에는 HI 라고 나와야 하는데,,, 어디가 잘못된거죠..?

정규 표현식 : "/\[([bciu]*(_cr=.+?|)(_lk=.+?|))\](.+?)\[\/\]/i"
출력 : "\\1<br>\\4"

가 되어야 합니다. 그리고 정규식도 별로 좋지 않네요.

/\[([^_]+(_cr|_lk)=[^\]]+)\]([^\[]+)\[\/\]/i

가 좀더 깔끔하겠군요.
너무 어렵다면.. 님의 식중에서 잘못된 부분만 수정해 보죠.

/\[(bciu(_cr|_lk=[^\]]+))\]([^\]]+)\[\/\]/i

가 되어야 합니다. 특히 식 중에서 .+? 의 표현은 아주 잘못된 식입니다.
또한 처음의 [bciu]* 역시 잘못된 식이죠. .+? 의 식은 아예 잘못된 식이며,
[bciu]* 의 의미는 b또는 c 또는 i 또는 u 가 0개 이상 있을 경우입니다.
즉, bbbbbbbbuuuuiiiiicccc 도 걸린다는 얘기이죠.

익명 사용자의 이미지

김정균 wrote:
특히 식 중에서 .+? 의 표현은 아주 잘못된 식입니다.

perl 스타일의 정규표현식에서 .+? 또는 .*?는 greedy matching을 사용하지 않도록 하는 식입니다.

lkjt의 이미지

김정균 wrote:

/\[([^_]+(_cr|_lk)=[^\]]+)\]([^\[]+)\[\/\]/i

[^_]+은 _아닌 모든 문자 아닌가요?

댓글 달기

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