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
Форумы портала PHP.SU :: Версия для печати :: Подскажите, пожалуйста
Форумы портала PHP.SU » PHP » Регулярные выражения » Подскажите, пожалуйста

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

1. Pavelbeginner - 04 Июля, 2010 - 19:50:41 - перейти к сообщению
Хочу сделать аналог комментариев php, то есть аналог однострочных комментариев такого как // и #. Функцие передаётся строка, а возвращает она строку уже без комментариев. Единственное отличие от php-ых комментариев такое, что если стоят два подряд символа комментария, например //// или ##, то это уже не воспринимается как комментарий, а воспринимается, как текст. Вот как сделал, далее расскажу в чём проблема.
Проблема в том, что таким образом, если будет встречен такой текст " я люблю петь#, а моя сестра нет\r\n", то будет удалено не только всё то, что после # и сам #, но мягкий знак, стоящий перед символом #. Подскажите, как сделать, чтобы такого не было. То есть может есть варианты другие в написание такой функции, которую я хочу. Заранее благодарю.
2. Champion - 04 Июля, 2010 - 20:05:33 - перейти к сообщению
Pavelbeginner пишет:
preg_replace('/([^#]?)#[^#]*$/mi', '\1', $line);
3. Pavelbeginner - 04 Июля, 2010 - 20:13:52 - перейти к сообщению
спасибо, извиняюсь, затупил.
4. Uchkuma - 04 Июля, 2010 - 21:17:23 - перейти к сообщению
Могут ли в самом комментарии встречаться решетки? В этом случае ваша регулярка не сработает.
5. Pavelbeginner - 04 Июля, 2010 - 21:20:34 - перейти к сообщению
Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках? и ещё один момент, что означает '\1' в качестве замены? Что это за спецсимвол такой? Заранее благодарю.
6. Uchkuma - 04 Июля, 2010 - 21:36:40 - перейти к сообщению
/1 или предпочтительнее использовать $1 - это ссылка на подмаску в шаблоне, где число - это порядковый номер подмаски. А скобочки - это как раз и есть подмаска. Подмаска номер 0 - это вхождение всего шаблона, а далее по порядку встречающиеся скобочки. Одна подмаска может быть вложена в другую.
(Добавление)
В вашем случае, то, что совпадает с шаблоном, заменяется на то, что попадает в первые скобочки.
7. Pavelbeginner - 04 Июля, 2010 - 22:15:17 - перейти к сообщению
Uchkuma, спасибо за разъяснение.
(Добавление)
Uchkuma, если подмаска вложена в другу, то как будут номероваться в таком случае подмаски, входящие в другу подмаску?
8. altermann - 04 Июля, 2010 - 23:38:32 - перейти к сообщению
В такомже порядке как и открывающиеся скобки подмасок: (1(2))(3)
9. Pavelbeginner - 05 Июля, 2010 - 01:01:00 - перейти к сообщению
спасибо.
10. JustUserR - 05 Июля, 2010 - 02:47:19 - перейти к сообщению
Pavelbeginner пишет:
Champion, вы не могли бы пояснить, как это работает, то есть что означают круглые скобки ([^#]?), я так понимаю это означает заменить всё, кроме того, что в круглых скобках
Вы создаете класс символов который совпадает с любыми символами кроме знака комментария решетки - таким образом с учетом используемого квантификатора в нем будет находиться как раз последний символ перед знаком решетки - так как в удаляющей замене он вообще не должен участвовать то можно использовать оператор просмотра назад заместо указанного класса символов

 

Powered by ExBB FM 1.0 RC1