2012-05-14 5 views
-1

Что такое регулярное выражение, чтобы захватить следующие группы в данной строке с помощью JAVA:Жадные против нежадной Pattern Matching в Java

hey,soul,345 

с ограничением, что первое слово может включать в себя запятые, а также. У меня есть следующее регулярное выражение:

(.*),(.*),(.*) 

но я принципиально хочу, чтобы совпадали только последние 3 запятые.

+0

@syker: при условии, что нет ничего более в строку, чем это технически нет ничего плохого в своем регулярном выражении, она должна соответствовать именно то, что вы просите ... есть еще к вашей строке, чем это? –

ответ

3

Я не думаю, что вам действительно нужно регулярное выражение для этого ... если у вас есть одна строка со значениями, разделенными запятыми, и вам нужны только последние 3 значения с разделителями-запятыми (что означает, что есть «три» значения, но сначала может в нем есть запятая), вы можете взорвать/разбить строку в запятой и иметь массив значений. затем просто введите последние 2 элемента массива для значений # 2 и # 3, а также нажмите на все, что осталось, для # 1.

1

Вы можете добавить $ до конца регулярного выражения, чтобы соответствовать последней части строки, а затем в каждом из захватывающих групп, вместо того, чтобы сопрягать . (любой символ), вы можете соответствовать любому без запятых : [^,]. Это должно дать вам последние три группы, разделенные запятыми, если вы хотите сделать это с помощью регулярного выражения. Так что ваше регулярное выражение будет:

(.*),([^,]*),([^,]*)$ 
+1

OP говорит, что первое значение может содержать запятую, поэтому это не сработает. Первая захваченная группа должна была бы быть совпадением всех (. *), ([^,] *), ([^,] *) $ ' –

+0

Хм хорошая точка. Спасибо, что заметили это. Теперь изменение ответа. – Ansari

 Смежные вопросы

  • Нет связанных вопросов^_^