Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отрицание в регулярных выражениях
 
 автор: Paysockee   (02.11.2010 в 15:26)   письмо автору
 
 

Уважаемые, направьте на истинный путь! С регулярными выражениями столкнулся впервые. Не могу найти, как описывать отрицание? Наример, есть последовательность abc. Как описать выражение, чтобы оно удовлетворяло условию при отсутствии abc?
Если в общем задача - нужно выявить наличие в тексте русских букв вне комментариев. Комментарии могут быть либо построчными (//), либо блочными (/* ........... */).

  Ответить  
 
 автор: neadekvat   (02.11.2010 в 16:00)   письмо автору
 
   для: Paysockee   (02.11.2010 в 15:26)
 

[abc] - соответствует любой из трех букв
[^abc] - соответствует любому символу, кроме указанных трех

  Ответить  
 
 автор: Paysockee   (02.11.2010 в 16:28)   письмо автору
 
   для: neadekvat   (02.11.2010 в 16:00)
 

Это понятно, но как быть если у меня не один символ, а последовательность? В частности, мне нужно избегать последовательности символов // и */

  Ответить  
 
 автор: .....   (02.11.2010 в 17:15)
 
   для: Paysockee   (02.11.2010 в 16:28)
 

(?!abc) - утверждает что следующие после текущей позиции символы не должны быть строкой 'abc'

но идея вцелом непонятна, хотите после нахождения конца комментария проверять что найдёт раньше, русских букв или начал комментариев ?
а для нахождения конца комментария сначала надо искать начало комментария ?

  Ответить  
 
 автор: .....   (02.11.2010 в 17:15)
 
   для: Paysockee   (02.11.2010 в 16:28)
 

с чего начинается Ваше выражение ?

  Ответить  
 
 автор: Paysockee   (02.11.2010 в 17:56)   письмо автору
 
   для: .....   (02.11.2010 в 17:15)
 

Задача в следующем. Необходимо определять наличие русских букв вне комментариев. То есть, если в тексте встречается комментарий на русском языке

// Это комментарий

/*
* Это тоже комментарий
*/

то все ок. А вот если русские буквы встречаются ВНЕ КОММЕНТАРИЯ, прямо в коде, например

String s = "А вот это уже не комментарий";

То тогда реагировать.

То есть частью регулярного выражения должна быть проверка на русские буквы, но тоьлко в том случае, если левее их нет двойного слэша.
Проверка на русские буквы - элементарно: [а-яА-Я], а вто как быть с двойным слэшом?

Ни один из нижеперечисленных вариантов не проходит:
[^(//)][а-яА-Я]
[^(//)].*[а-яА-Я].*
[^(//)][а-яА-Я]
[/]{2}[а-яА-Я]

Я в регулярных выражениях новичок, но сколько ни роюсь в интернете, с похожей задачей как будто никто не сталкивался.

  Ответить  
 
 автор: .....   (02.11.2010 в 18:39)
 
   для: Paysockee   (02.11.2010 в 17:56)
 

нужно было искать по словам "Лексический анализ" :)

задача у Вас не настолько простая насколько такой кажется.
если даже будете просматривать весь текст например таким
preg_replace_callback('@\G(?>//[^\r\n]*|/\*.*?\*/|.+?)(?#непроверял)@s' ............ )
то откуда уверенность что // или /* не просто строка в кавычках, а именно начало комментария, значит нужно анализировать и строки в кавычках, .....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования