| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Регулярное выражение |
| Автор: whoever 17.2.2008, 03:14 |
| Как будет выглядеть регулярное выражение для "любые символы, кроме двух подряд идущих Х (один Х можно)". Пока только '((?!Х{2}).)*' пришло в голову, но чуется, что долго работать будет. Решение искалось и ранее в теме http://forum.vingrad.ru/topic-139064.html#st_0_view_0, но не нашлось. поправка: приведенное "решение" тоже оказалось неверным. |
| Автор: nornad 17.2.2008, 06:48 |
| А по-старинке (вырезать все нехорошие последовательности при помощи replaceAll) - никак? Если нет, то объясни прямо, ради чего это вообще требуется - может, не регулярками что предложим... |
| Автор: whoever 17.2.2008, 11:56 |
| Нужно заменить по шаблону: "тра-та-та {{текст[[XXXXX]]текст}} тра-та-та" - в подобной строке нужно заменить {{текст[[XXXXX]]текст}} на "текст XXXXX текст" (вместо XXX еще и подставить что-то), либо вырезать все между {{ и }}, в зависимостри от ситуации. |
| Автор: v2v 17.2.2008, 12:42 |
| количество повторяемых символов изменяющееся или постоянное? повторяется какой то определённый символ, или не известно какой символ будет повторятся? |
| Автор: whoever 17.2.2008, 12:44 |
| Символов повторяющихся всегда два (в данном случае это {{, }}, [[ и ]]). |
| Автор: smartov 17.2.2008, 14:27 |
| whoever, получается что тебе нужно сначала найти все вхождения {{моя_строка}}, а потом работать уже с вхождениями. Добавлено через 1 минуту и 2 секунды Вроде ничего сложного. Не пойму зачем искать "все кроме двух подряд" |
| Автор: whoever 17.2.2008, 15:46 |
| "Все кроме двух подряд" - это для составления подобного выражения: {{ все-кроме-двух-подряд-[ две-подряд-[ все-кроме-двух-подряд-] две-подряд-] все-кроме-двух-подряд-} две-подряд-} |
| Автор: smartov 17.2.2008, 17:31 | ||
| whoever, может попробовать наоборот? ... хотя без отключения жадности все равно не обойтись... Добавлено через 5 минут и 25 секунд Попробовал накидать на php - вроде оптимальнее через callback функции. Может пригодится.
|
| Автор: whoever 17.2.2008, 18:09 | ||
| smartov, а разве жадность отключать не нужно? Дважды (для фигурных и квадратных скобок) будет захвачена наиболее длинная строка в примере. Нет ли в j2se чего-либо похожего на preg_replace_callback? На данный момент лучшее найденное решение:
Но действует на последовательность из X любой длины, начиная с 2-х. |
| Автор: smartov 17.2.2008, 18:49 |
| whoever, Нужно, я отключил. Просто в php это делается глобально - модификатор U (Ungreedy) в конце рег выражения. Прости, я не джавист |
| Автор: whoever 17.2.2008, 19:17 |
| smartov, спасибо за помощь:) |