2014-09-11 3 views
1

Связано это: RegEx: Grabbing values between quotation marks.RegEx: значение перехвата между кавычками из строки

Если есть строка, как это:

HYPERLINK "hyperlink_funda.docx" \l "Sales" 

Регулярное выражение дано по ссылке

(["'])(?:(?=(\\?))\2.)*?\1 

дает мне

[" HYPERLINK ", " \l ", " "] 

Что регулярное выражение будет возвращать значения вложенные в кавычки (в частности, между \" марок)?

["hyperlink_funda.docx", "Sales"] 

Использование Java, String.split(String regex) way.

+3

Попробуйте '\\". *? \\ "'. –

+0

Thats not working. Предоставление - "HYPERLINK" hyperlink_funda.docx "\ l" Продажи "" полностью. – Prakhar

+0

Я уверяю вас, он работает. [Взгляните сюда.] (Http://regex101.com/r/gJ0nE3/1) –

ответ

2

Вы не должны использовать это с .split() методом. Вместо того, чтобы использовать Pattern с захвата групп:

{ 
    Pattern pattern = Pattern.compile("([\"'])((?:(?=(\\\\?))\\3.)*?)\\1"); 
    Matcher matcher = pattern.matcher(" HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" "); 

    while (matcher.find()) 
     System.out.println(matcher.group(2)); 
} 

Выход:

hyperlink_funda.docx
продаж

Вот regex demo, и здесь является online code demo.

2

Я думаю, что вы не понимаете природу метода String.split. Его задача - найти способ разделения строки, сопоставляя функции разделителя, а не путем сопоставления функций строк, которые вы хотите вернуть.

Вместо этого вы должны использовать Pattern и Matcher:

String txt = " HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" "; 

String re = "\"([^\"]*)\""; 

Pattern p = Pattern.compile(re); 
Matcher m = p.matcher(txt); 
ArrayList<String> matches = new ArrayList<String>(); 
while (m.find()) { 
    String match = m.group(1); 
    matches.add(match); 
} 
System.out.println(matches); 
+0

yep, я ожидал, что ошибся с String.split. – Prakhar

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