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 :: Подскажите, пожалуйста

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Pavelbeginner
Отправлено: 04 Июля, 2010 - 19:50:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Хочу сделать аналог комментариев php, то есть аналог однострочных комментариев такого как // и #. Функцие передаётся строка, а возвращает она строку уже без комментариев. Единственное отличие от php-ых комментариев такое, что если стоят два подряд символа комментария, например //// или ##, то это уже не воспринимается как комментарий, а воспринимается, как текст. Вот как сделал, далее расскажу в чём проблема.
Проблема в том, что таким образом, если будет встречен такой текст " я люблю петь#, а моя сестра нет\r\n", то будет удалено не только всё то, что после # и сам #, но мягкий знак, стоящий перед символом #. Подскажите, как сделать, чтобы такого не было. То есть может есть варианты другие в написание такой функции, которую я хочу. Заранее благодарю.
 
 Top
Champion Супермодератор
Отправлено: 04 Июля, 2010 - 20:05:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Pavelbeginner пишет:
preg_replace('/([^#]?)#[^#]*$/mi', '\1', $line);
 
 Top
Pavelbeginner
Отправлено: 04 Июля, 2010 - 20:13:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




спасибо, извиняюсь, затупил.

(Отредактировано автором: 04 Июля, 2010 - 21:16:07)

 
 Top
Uchkuma
Отправлено: 04 Июля, 2010 - 21:17:23
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Могут ли в самом комментарии встречаться решетки? В этом случае ваша регулярка не сработает.

(Отредактировано автором: 04 Июля, 2010 - 21:19:59)

 
 Top
Pavelbeginner
Отправлено: 04 Июля, 2010 - 21:20:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках? и ещё один момент, что означает '\1' в качестве замены? Что это за спецсимвол такой? Заранее благодарю.
 
 Top
Uchkuma
Отправлено: 04 Июля, 2010 - 21:36:40
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




/1 или предпочтительнее использовать $1 - это ссылка на подмаску в шаблоне, где число - это порядковый номер подмаски. А скобочки - это как раз и есть подмаска. Подмаска номер 0 - это вхождение всего шаблона, а далее по порядку встречающиеся скобочки. Одна подмаска может быть вложена в другую.
(Добавление)
В вашем случае, то, что совпадает с шаблоном, заменяется на то, что попадает в первые скобочки.
 
 Top
Pavelbeginner
Отправлено: 04 Июля, 2010 - 22:15:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Uchkuma, спасибо за разъяснение.
(Добавление)
Uchkuma, если подмаска вложена в другу, то как будут номероваться в таком случае подмаски, входящие в другу подмаску?
 
 Top
altermann
Отправлено: 04 Июля, 2010 - 23:38:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




В такомже порядке как и открывающиеся скобки подмасок: (1(2))(3)


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
Pavelbeginner
Отправлено: 05 Июля, 2010 - 01:01:00
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




спасибо.
 
 Top
JustUserR
Отправлено: 05 Июля, 2010 - 02:47:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Pavelbeginner пишет:
Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках
Вы создаете класс символов который совпадает с любыми символами кроме знака комментария решетки - таким образом с учетом используемого квантификатора в нем будет находиться как раз последний символ перед знаком решетки - так как в удаляющей замене он вообще не должен участвовать то можно использовать оператор просмотра назад заместо указанного класса символов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB