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

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

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

 

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

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

тема: Поиск символа по условию
 
 автор: big-trot   (15.02.2012 в 14:51)   письмо автору
 
 

Здравствуйте!

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

Исходная строка примера:

"бла бла, бла бла, (бла, бла) бла бла, бла".

Требуемый результат :

"бла бла , бла бла , (бла, бла) бла бла , бла".

Можно ли эту задачу решить одним выражением? Спасибо.

  Ответить  
 
 автор: Sfinks   (15.02.2012 в 16:41)   письмо автору
 
   для: big-trot   (15.02.2012 в 14:51)
 

Нет. РВ может заглянуть вперед либо назад на предмет присутствия или отсутствия конкретного символа или подстроки, но только сразу за(перед) текущей позицией, а не просмотреть строку до конца или начала.
Если попытаться написать что-то вроде
"#(?<!\(.*?),#" //предполагалось, что это означает, что нигде перед запятой нет открывающейся скобки
, то, даже при таком незначительном усложнении, получается ошибка Compilation failed: lookbehind assertion is not fixed length (шаблон просмотра назад не фиксированной длинны). А надо было бы проверить не только это, но еще чтоб не было скобки после, чтоб открывающиеся скобки, но уже закрытые игнорировались и т.п..... Короче мало того что не возможно, но еще и овчинка выделки не стоит. Гораздо проще одной строкой удалить все ( .... ), а второй сделать поиск в том, что осталось.

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

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