2009-11-19 3 views
1

Я создаю генератор CSS в PHP, который использует файлы CSSX (да, это моя идея) (со специальным синтаксисом). Одной из особенностей являются «короткими комментариями»:Замена // комментариев с/* comments */в PHP

body 
{ 
    font-family: Georgia; //I really like this font! 
} 

Теперь я хочу, чтобы заменить этот комментарий с/* ... */комментарием, поэтому вывод таков:

body 
{ 
    font-family: Georgia; /*I really like this font!*/ 
} 

Как я могу сделай это? Спасибо,

P.S. Полный CSSX-файл считывается в одну строковую переменную.
P.P.S Ответ дан. Чтобы исправить URL ('// сервер/etc.cssx') проблема, используйте:

$file = preg_replace('~[^"\'\(]//([^\r\n]*)[^"\'\)]~', '/*$1*/', $file); 

ответ

5

регулярное выражение должно сделать трюк:

$str = preg_replace('_//(.*)$_m', '/*$1*/', $str); 

Это не будет принимать во внимание кавычками - если вы используете что-то сумасшедшее, как

background-image: url('//my-server/my.jpg'); 

тогда это будет думать, что это комментарий. Если это проблема, вам лучше написать правильный парсер.

+0

Удивительный это сработало! – 2009-11-19 15:59:53

+0

@Koning: они просто определяют разделитель для регулярного выражения. Вы можете использовать много символов, а 'preg_replace' будет считать, что первым является разделитель, который вы хотите использовать. «Стандартным» разделителем является '/', но тогда вам придется избегать ваших '/' 's в шаблоне. – jheddings

+0

Хммм, переместите новую строку, и я думаю, что вы настроены: http://codepad.org/uNV7jQmb – Kzqai

3
<? preg_replace('#//(.*)$#', '/*$1*/', $cssx); ?> 
+0

Вы были 26 секунд, чтобы опоздать, но я подниму его^_^ – 2009-11-19 16:01:57

+0

@ Конинг: Я просто не могу конкурировать с молниеносными пальцами Грега ... tnx – jheddings

1

выражение Грега есть две проблемы: во-первых, «т» и «$» являются излишними, второй он не обрабатывает возврат каретки правильно (в случае, если система использует их).

Лучшее выражение, как представляется,

preg_replace('~//([^\r\n]*)~', '/*$1*/', $str); 
+0

Ну, это действительно важно, OSX, Linux и Windows, так как я выпущу источник. – 2009-11-19 16:12:21

Смежные вопросы