[java.util.regex.Pattern] Грамотный шаблон для символов типа "\", "|"
[code] [/code]
.
Просто он не поддерживает форматирование, а я хотел выделить цветом.
п.с.: вот так Надежда и умирает - смотришь, что кто-то ответил, а на самом деле нет
прошу прощения
Или для группировки есть другая конструкция?
System.console.format("%b%n", Pattern.compile("(\\d+)\\s+(\\w+)\\s+(\\d+)\\s+\\|(.+?)\\|\\|(.+?)\\|").matcher("123 FGH 567 |Земля||Луна|").find;
"true" пишет
Но ни "|", ни "\|", ни "[|]" не работает (шаблон сразу ломается).
странно это. Т.к. '\' '|' - служебные символы, то в регэкспе ,доступ к таким символам через \, т.е. "\\ '\|'
соответсвенно. Т.к. один \ виндой сжирается , то
[\\|\\\\](.+) должно работать
Т.к. один \ виндой сжирается
только узнал про это?
[\\|\\\\](.+) должно работать
Я знал, что она жадная, но не думал, что настолько
Я правильно понял, что
[\\|\\\\]есть выбор из двух символов:
\\|(который как раз "|") и
\\\\(который "\")?
В принципе я заменил
\\p{Punct}на
\x5Си
\x7Ссоответственно, но такой вариант менее читабелен.
п.с.: ну почему использование тега код так некомпактно
Linux?
один раз эскейпим для регэкспа: «\» -> «\\», «|» -> «\|»,
второй раз — для Явы: «\\» -> «\\\\», «\|» -> «\\|»
Венда голодает
Давайте проведем сбор пожертвований в пользу голодающей винды
Всем спасибо, буду пробовать
Groovy юзать. Это такой Perl, но поддерживающий синтаксис Java и интегрирующийся с ней, как только можно. Для всяких скриптов рулит неимоверно. И, поскольку регулярки встроены в язык, нету этого дебильного двойного эскейпинга.
А вообще, попробуй
Спасибо, посмотрю
Возник такой вопрос (полагаю, что ответ отрицательный, но вдруг...):
Шаблоны типа (регэксп)+ этот класс поддерживает, но выводит только последнее вхождение
Можно как-то получить их все?
А то получается, что groupCount практической пользы не несет (ведь он равен кол-ву в шаблоне).
А то самое то бы было: получаем groupCount-ом реальное кол-во получившихся групп и обрабатываем их за раз.
Иерархии так удобно обрабатывать.
Можно как-то получить их все?вроде нельзя
надо чтото типа while(match) по этому подвыражению делать и по всем проходить
надо чтото типа while(match) по этому подвыражению делать и по всем проходитьНаверное лучше использовать старый добрый split
Что я и сделал.
Уж не знаю насчёт джавы, но в пхп есть preg_match, который ведёт себя как раз так, как ты описал; и есть preg_match_all, который ловит все совпадения. Может, и тут так же?
Оставить комментарий
durka82
и тп.Например для строки: "123 FGH 567 |Земля||Луна|" - приходится использовать шаблон , где в качестве "|" используется "\p{Punct}" (красным выделил выдираемые части текста/шаблона).
Это и не очень правильно, так как там в принципе могут стоять и другие символы.
Но ни "|", ни "\|", ни "[|]" не работает (шаблон сразу ломается).
В чем тут дело?
Что я делаю не так?
И вообще, с интересом выслушаю все советы на тему, как это лучше написать