Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Проблема с регулярным выражением "?" |
Автор: Den1s 24.3.2006, 12:54 |
Мне надо правильно считать строку "????", т.к. ? - является регулярным выражением то выскакивает ошибка java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0 ???? ^ at java.util.regex.Pattern.error(Pattern.java:1528) at java.util.regex.Pattern.sequence(Pattern.java:1645) at java.util.regex.Pattern.expr(Pattern.java:1545) at java.util.regex.Pattern.compile(Pattern.java:1279) at java.util.regex.Pattern.<init>(Pattern.java:1035) at java.util.regex.Pattern.compile(Pattern.java:779) и т.д. может есть какой то способ? |
Автор: glukochillo 24.3.2006, 13:01 |
попробуй перед считыванием произвести замену: "?" -> другой символ |
Автор: Den1s 24.3.2006, 13:15 |
а как эту замену сделать то? пробовал так: if(String.indexOf("?") != -1) String = String.replaceAll("?","\\?"); но indexOf уже "?" воспринимает как ошибку, т.е. учитывает регулярные выражения. плюс конечно все таки желательно как то обойтись без замены. |
Автор: LSD 24.3.2006, 13:59 | ||
Экранируй его:
|
Автор: Den1s 24.3.2006, 14:33 |
ну "*" это ведь тоже регулярное выражение...и если звездочки будут в поле ввода, то выскочит следующая ошибка Dangling meta character '*' near index 0 **** at java.util.regex.Pattern.error(Pattern.java:1528) at java.util.regex.Pattern.sequence(Pattern.java:1645) at java.util.regex.Pattern.expr(Pattern.java:1545) at java.util.regex.Pattern.compile(Pattern.java:1279) at java.util.regex.Pattern.<init>(Pattern.java:1035) at java.util.regex.Pattern.compile(Pattern.java:802) т.е. тут вопрос в том как мне строку "????" принять как "//?//?//?//?" , при том что функции изначально регулярные выражения как exeption воспринимают ![]() |
Автор: LSD 24.3.2006, 14:45 | ||
Любой метасимвол можно экранировать с помощью \\. Если тебе надо искать текст из строки ввода, и не охота заморачиваться с экранированием. Ищи текст так:
|
Автор: Den1s 24.3.2006, 14:53 |
нет, у меня ситуация такая.... Пользователь в поле ввода вводит строку в jsp странице, моя функция в файле java эту строку получает, когда пользователь вводит нормальные данные все нормально, но ему захотелось указать что это будет любое слово из 4 букв и он вводит соответственно "????" закрывает окно и в этот момент моя функция получает эти данные, так как первый идет "?"то соотвественно у меня в Eclipse в консоли выскакивает следующие предупреждение java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0 ???? ^ at java.util.regex.Pattern.error(Pattern.java:1528) at java.util.regex.Pattern.sequence(Pattern.java:1645) at java.util.regex.Pattern.expr(Pattern.java:1545) at java.util.regex.Pattern.compile(Pattern.java:1279) at java.util.regex.Pattern.<init>(Pattern.java:1035) at java.util.regex.Pattern.compile(Pattern.java:779) программа как бы работает дальше но эту функцию выполняет неправильно.... и вот мне хотелось бы именно узнать как мне эти полученные "????" преобразовать в моей функции в "\\?\\?\\?\\?"... |
Автор: LSD 24.3.2006, 15:38 | ||
|
Автор: glukochillo 24.3.2006, 16:25 | ||
Еще один вариант:
|
Автор: Den1s 24.3.2006, 17:00 |
спасибо...это то все понятно...но дело в том что у меня почему то на этих вопросах ошибка срабатывает, он как только считывает что первый вопрос....может не там делаю замену... ![]() |
Автор: Beard 24.3.2006, 17:09 |
Можно на метод посмотреть, в котором появляется ошибка? |
Автор: Den1s 24.3.2006, 17:15 |
ну вот у меня допустим String поступает, я делаю if(String.indexOf("?") != -1) String = String.replaceAll("?","\\?"); и после условия у меня эта ошибка и вылетает.... дело в том что судя по всему indexOf и вызывает этот exception ![]() |
Автор: glukochillo 24.3.2006, 17:23 |
неа, ошибку вызывает replaceAll, так что ищи альтернативу этому методу |
Автор: Beard 24.3.2006, 17:25 |
IndexOf не может вызвать этот эксепшн - это replaceAll, это уже выяснили и предложили как заменить. Чем способ, предложенный LSD не нравится? |
Автор: Den1s 24.3.2006, 17:47 |
спасибо, действительно это метод replaceAll этот exception вызывает....странно.... способ предложенный LSD работает, но он более громоздкий.... так а почему же replaceAll так странно ведет себя в этой ситуации? |
Автор: Beard 24.3.2006, 17:52 | ||
Потому что он эквивалентен
а там уже читай мануал по регекспам или смотри в код |
Автор: Den1s 24.3.2006, 18:13 | ||
всё, я понял!!!! ![]() ![]() ![]() в replaceAll просто надо было к вопросам два обратных слэша добавлять!
|
Автор: dailapu 28.10.2008, 11:43 |
В какой-то книжке умной читал, автор довал рекомендации: ....Если вы используйте эскайп последовательности,... попробуйте использовать обратный слэш \......Но дальше, этот дядечка, расказал о таком опыте, что невсегда достаточно написать лишь пару слешов, их число для правельного понимания джавой может доходить до 5 штук подряд!? Почему так происходит он не знает((( |