Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Подскажите, пожалуйста
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Хочу сделать аналог комментариев php, то есть аналог однострочных комментариев такого как // и #. Функцие передаётся строка, а возвращает она строку уже без комментариев. Единственное отличие от php-ых комментариев такое, что если стоят два подряд символа комментария, например //// или ##, то это уже не воспринимается как комментарий, а воспринимается, как текст. Вот как сделал, далее расскажу в чём проблема.
Проблема в том, что таким образом, если будет встречен такой текст " я люблю петь#, а моя сестра нет\r\n", то будет удалено не только всё то, что после # и сам #, но мягкий знак, стоящий перед символом #. Подскажите, как сделать, чтобы такого не было. То есть может есть варианты другие в написание такой функции, которую я хочу. Заранее благодарю.
Champion
Отправлено: 04 Июля, 2010 - 20:05:33
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Pavelbeginner пишет:
preg_replace('/([^#]?)#[^#]*$/mi', '\1', $line);
Pavelbeginner
Отправлено: 04 Июля, 2010 - 20:13:52
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках? и ещё один момент, что означает '\1' в качестве замены? Что это за спецсимвол такой? Заранее благодарю.
Uchkuma
Отправлено: 04 Июля, 2010 - 21:36:40
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
/1 или предпочтительнее использовать $1 - это ссылка на подмаску в шаблоне, где число - это порядковый номер подмаски. А скобочки - это как раз и есть подмаска. Подмаска номер 0 - это вхождение всего шаблона, а далее по порядку встречающиеся скобочки. Одна подмаска может быть вложена в другую. (Добавление)
В вашем случае, то, что совпадает с шаблоном, заменяется на то, что попадает в первые скобочки.
Pavelbeginner
Отправлено: 04 Июля, 2010 - 22:15:17
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Uchkuma, спасибо за разъяснение. (Добавление)
Uchkuma, если подмаска вложена в другу, то как будут номероваться в таком случае подмаски, входящие в другу подмаску?
altermann
Отправлено: 04 Июля, 2010 - 23:38:32
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010 Откуда: Днепропетровск
Помог: 6 раз(а)
В такомже порядке как и открывающиеся скобки подмасок: (1(2))(3)
----- Я прирожденный кузнец, я не могу не куя!
Pavelbeginner
Отправлено: 05 Июля, 2010 - 01:01:00
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
спасибо.
JustUserR
Отправлено: 05 Июля, 2010 - 02:47:19
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Pavelbeginner пишет:
Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках
Вы создаете класс символов который совпадает с любыми символами кроме знака комментария решетки - таким образом с учетом используемого квантификатора в нем будет находиться как раз последний символ перед знаком решетки - так как в удаляющей замене он вообще не должен участвовать то можно использовать оператор просмотра назад заместо указанного класса символов
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.