2009-10-20 6 views
0

Если у меня есть строка, напримервопрос матча Regex

lotsofcrap «somethingimportant» moreotherstuff

можно ли получить Regex чтобы соответствовать только то, что находится между «», за исключением кавычки? Таким образом, способ обнаружить это будет что-то вроде «*», но вернется „somethingimportant“, а не только чисто somethingimportant

ответ

4
"(.*)" 

Вы можете использовать parenthese для создания группы захвата. Как вы получаете доступ к нему, зависит от языка/библиотеки, которую вы используете. Обычно группы захвата доступны как $1 или \1 в Perl-подобных языках. Например, в Perl:

'hello "world" !!!' =~ /"(.*)"/; 
print "$1\n"; 
+0

+1 Удар меня 27 секунд :) – si618

+0

на самом деле, это не решает про полностью, так как группа не будет содержать круглые скобки. – si618

+0

Спасибо, это то, что я искал. – mike

1

Если ваш движок регулярных выражений поддерживает нулевой ширины утверждения (просмотровых задом и смотреть-aheads),

(?<=")[^"]*(?=") 

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

Однако это глупо. Вы должны просто

"([^"]*)" 

матч все, включая кавычки, а затем тянуть группу 1 (множество скобок) из матча.

1

Попробуйте "(.*?)"

? означает, что .* будет расширяться по мере необходимости (пока она не соответствует следующему)»в данном случае)

код Java.:

static String regex = "\"(.*?)\""; 
static Pattern p = Pattern.compile(regex); 

public static List<String> getMatches(String inputText) { 
    Matcher m = p.matcher(inputText); 
    List<String> list = new ArrayList<String>(); 
    while(m.find()){ 
     list.add(m.group(1)); 
    } 
    return list; 
} 
Смежные вопросы