Я пытаюсь написать Java-регулярное выражение, которое найдет все строки между 2 :
. Если строка между символами имеет пробелы, концы строк или вкладки, ее следует игнорировать. Пустые строки также игнорируются. _
в порядке! Группа может либо включать в себя приложение :
, либо нет.Java Regex: соответствие строки между двумя двоеточиями
Вот несколько тестов и ожидаемых групп:
"test :candidate: test" => ":candidate:"
"test :candidate: test:" => ":candidate:"
"test :candidate:_test:" => ":candidate:", ":_test:"
"test :candidate::test" => ":candidate:"
"test ::candidate: test" => ":candidate:"
"test :candidate_: :candidate: test" => ":candidate_:", ":candidate:"
"test :candidate_:candidate: test" => ":candidate_:", ":candidate:"
Я проверил много регулярных выражений и это те, почти работа:
":(\\w+):"
":[^:]+:"
Я до сих пор есть проблемы, когда 2 группы «доля» двоеточие:
"test :candidate_: :candidate: test" => ":candidate_:", ":candidate:" // OK
"test :candidate_:candidate: test" => ":candidate_:" // ERROR! :(
Похоже, что первая группа «потребляет» второй двоеточие и коврик cher не может найти вторую строку, которую я ожидал.
Может кто-нибудь указать мне в правильном направлении, чтобы решить эту проблему? Можете ли вы также уточнить, почему помощник «потребляет» двоеточие?
Спасибо.
Вы считаете обрабатывать строку по-разному?Вместо использования сокетов и т. Д. Большая часть подъема может быть выполнена с помощью String # split –
Да, я думал о 'split()', но я хотел понять, как это сделать с помощью регулярного выражения. Я думаю, что я буду использовать этот метод, если не могу найти решение регулярного выражения. –
Какой метод регулярного выражения вы используете? Вам нужно захватить каждую:: область с разделителями внутри группы соответствия, не так ли? –