"/* first*/ function test(); /*second*/" Regex. Вернуть код, не являющийся коментсами

wDevil

Новичок
"/* first*/ function test(); /*second*/" Regex. Вернуть код, не являющийся коментсами

Найти текст, которы НЕ находится между /* и */. Кароче текст, который не является комментариями.
Например такой текст: /* first comments*/ function test(); /*second comments*/
Что-то вообще ниче в голову не лезит. Пробовал че нить с утверждениями помутить: (?<!\/\*|\*\/).*(?!\/\*|\*\/)~ Но ниче не получается. Мож кто че подскажет?
 

wDevil

Новичок
Пишу код, который считает число эффективных строк в коде. Нужно все комментсы не учитывать. Зачитывю фаил по строчно и потом определяю нужно ли учитывать эту строку. Сейчас сделано при помощи strpos e.t.c. так как мне кажется что быстрей будет чем регулярками. А знакомый стал делать при помощи регуляпных выражний вот и стало интересно, как решить эту проблему при помощи регулярных выражений.
 

Wicked

Новичок
ИМХО: число эффективных строк в коде - довольно бесполезная информация.

Я бы читал файл целиком, и вырезал комментарии регулярками а-ля preg_replace("~/\*.*?(\*/|$)~s", " ", ...);
 

wDevil

Новичок
Ну задача такая :) Не для практический целей, а в учебных. Читать весь фаил целиком... по-моему парсить строку быстрее и меньше в затратах, чем целиком весь код в память и реуляркой... Как вариант может вырезать из строки комментсы и смотреть по тому что осталось? Если че нить осталось, то есть код.. хотя тож чет нето по-моему...
 

Wicked

Новичок
wDevil
вопрос на засыпку: если читать файл построчно, как ты будешь отливливать многострочные комментарии?

хотя и мой регэксп далеко не идеальный, и не сможет учитывать конфликты между // и /**/
 

wDevil

Новичок
находим /* ставим флаг miltiline=1 и до тех пор пока не встретим */ - комментарий.
 

Wicked

Новичок
я бы лучше поигрался с [m]token_get_all[/m]

-~{}~ 16.10.06 13:03:

вырезание всех комменатриев:
PHP:
  $tokens = token_get_all(file_get_contents('1.php'));
  foreach($tokens as $token) {
    if (is_array($token)) {
      if ($token[0] != T_COMMENT) {
        print $token[1];
      }
    } else {
      print $token;
    }
  }
 

wDevil

Новичок
Да, ты прав, есть аналогичные и более простые решения, Просто интересно возможно ли ето регуляркой решить... :) Подождем мож кто че подскажет ;)
 
Сверху