RegExp для комментариев.

Discussion in 'PHP' started by |qbz|, 29 Jan 2012.

  1. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Подскажите самый правильный и 100%-но рабочий паттерн для нахождения комментов (однострочные (//) и многострочные (/**/)).

    Комменты могут быть например и такими:

    Code:
    /* /* /* */
    или

    Code:
    // /* */ */

    Код тоже может содержать что-то вроде

    Code:
    $a = '/* 123'; $b = '*/'; $c = '//'; $d = '/**/';
    Комменты также могут быть в любом месте, то есть например

    Code:
    $a = 123; /* lol */ $b = 321; // hahaha /**/
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://ostermiller.org/findcomment.html
     
    _________________________
  3. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Не полно.
     
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Тогда не стоит использовать регулярки. Делаешь токенизер или берешь готовый и пользуешься.
     
    _________________________
    1 person likes this.
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    |qbz| под какие исходники, если PHP - то в нем есть встроенный токенайзер - http://php.net/token_get_all

    Не пытайтесь сделать это с помощью регулярных выражений, под все языки программирования уже существуют свои токенизаторы.
     
    _________________________
    1 person likes this.
  6. miltorg

    miltorg New Member

    Joined:
    28 Jan 2012
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    #!/usr/bin/perl

    $_=q~$a = '/* 123'; $b = '*/'; $c = '//'; $d = '/**/';
    $a = 123; /* lol */ $b = 321; // hahaha /**/~;

    s|'/\*||g;
    s|'\*/||g;
    s|\*/'||g;
    s|'//'||g;
    s|||g;
    /.*\/\//;
    $u=$';
    /(\/\*.*?\*\/)/g;
    $_= "$& $u";
    print;
     
    1 person likes this.
  7. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    miltorg после того как умные люди сказали что в каждом языке есть встроенный токенайзер я думаю было глупо выложить код с использованием регексп =)
     
    1 person likes this.
  8. miltorg

    miltorg New Member

    Joined:
    28 Jan 2012
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Почему? Я написал код. Хотел про него поговорить.
     
  9. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Благодарю за ответы.