Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение, любые символы, кроме подряд идущих X и X 
V
    Опции темы
whoever
Дата 17.2.2008, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



Как будет выглядеть регулярное выражение для "любые символы, кроме двух подряд идущих Х (один Х можно)". Пока только '((?!Х{2}).)*' пришло в голову, но чуется, что долго работать будет.
Решение искалось и ранее в теме http://forum.vingrad.ru/topic-139064.html#st_0_view_0, но не нашлось.

поправка: приведенное "решение" тоже оказалось неверным.

Это сообщение отредактировал(а) whoever - 17.2.2008, 03:49
PM   Вверх
nornad
Дата 17.2.2008, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



А по-старинке (вырезать все нехорошие последовательности при помощи replaceAll) - никак?
Если нет, то объясни прямо, ради чего это вообще требуется - может, не регулярками что предложим...


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
whoever
Дата 17.2.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



Нужно заменить по шаблону:
"тра-та-та {{текст[[XXXXX]]текст}} тра-та-та" - в подобной строке нужно заменить {{текст[[XXXXX]]текст}} на "текст XXXXX текст" (вместо XXX еще и подставить что-то), либо вырезать все между {{ и }}, в зависимостри от ситуации.
PM   Вверх
v2v
Дата 17.2.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



количество повторяемых символов изменяющееся или постоянное?
повторяется какой то определённый символ, или не известно какой символ будет повторятся?


--------------------
PM   Вверх
whoever
Дата 17.2.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



Символов повторяющихся всегда два (в данном случае это {{, }}, [[ и ]]).
PM   Вверх
smartov
Дата 17.2.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



whoever, получается что тебе нужно сначала найти все вхождения {{моя_строка}}, а потом работать уже с вхождениями.

Добавлено через 1 минуту и 2 секунды
Вроде ничего сложного. Не пойму зачем искать "все кроме двух подряд"
PM MAIL   Вверх
whoever
Дата 17.2.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



"Все кроме двух подряд" - это для составления подобного выражения:
{{
все-кроме-двух-подряд-[
две-подряд-[
все-кроме-двух-подряд-]
две-подряд-]
все-кроме-двух-подряд-}
две-подряд-}
PM   Вверх
smartov
Дата 17.2.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



whoever, может попробовать наоборот? ... хотя без отключения жадности все равно не обойтись...

Добавлено через 5 минут и 25 секунд
Попробовал накидать на php - вроде оптимальнее через callback функции. Может пригодится.

Код

<?

function figureBrackets($match) {
    return preg_replace_callback('/\[\[(.*)\]\]/U', 'squareBrackets', $match[1]);
}

function squareBrackets($match) {
    return $match[1] == 'камнеедок' ? 'попугаев' : $match[1];
}

$string = 'Восемь {{больших зеленых [[камнеедок]] пили [[чай]] в саду}} и решали уравнение в котором {{были символ }, ] и другие}}';

$string = preg_replace_callback('/\{\{(.*)\}\}/U', 'figureBrackets', $string);

echo $string;

?>

PM MAIL   Вверх
whoever
Дата 17.2.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



smartov, а разве жадность отключать не нужно? Дважды (для фигурных и квадратных скобок) будет захвачена наиболее длинная строка в примере. Нет ли в j2se чего-либо похожего на preg_replace_callback?
На данный момент лучшее найденное решение:
Код

((?!XX)((?!X)|(?<!X)).)*
где X - нужные символы.

Но действует на последовательность из X любой длины, начиная с 2-х.
PM   Вверх
smartov
Дата 17.2.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



whoever
Цитата(whoever @  17.2.2008,  17:09 Найти цитируемый пост)
а разве жадность отключать не нужно? 

Нужно, я отключил. Просто в php это делается глобально - модификатор U (Ungreedy) в конце рег выражения.

Цитата(whoever @  17.2.2008,  17:09 Найти цитируемый пост)
j2se чего-либо похожего на preg_replace_callback

Прости, я не джавист smile Пролистал до диагонали регы в джаве - может у matcher-a есть какой-нибуь iterate. А так нужно у явистов просить  smile 
PM MAIL   Вверх
whoever
Дата 17.2.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: 1
Всего: 1



smartov, спасибо за помощь:)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1368 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.