2013-07-31 2 views
0

Я пытаюсь извлечь информацию о каждом языке из файла * .rc файла MFC.Perl regex matching работает weired

Итак, я нашел «LANGUAGE LANG_([\s\S]*?)#endif(.*)\n/{1,}» работаем для следующих текстов на http://regexpal.com/

: 
LANGUAGE LANG_Language1, SUBLANG_XXX 
#pragma code_page() 
: 
END 
#endif // Language1 resources 
///////////////////////////////////////////////////////////////////////////// 
: 
LANGUAGE LANG_Language2, SUBLANG_XXXX 
#pragma code_page() 
: 
END 
#endif // Language2 resources 
///////////////////////////////////////////////////////////////////////////// 
: 

, а также, я программируюсь о регулярных выражениях найти через Perl, как это.

$rc_file = read_file($ARGV[0]); 
@LANG = ($rc_file =~ /LANGUAGE LANG_([\s\S]*?)#endif(.*)\n\/{1,}/g); 

и я ожидал получить каждый элемент элемента @LANG, например, следующие тексты.

LANGUAGE LANG_Language1, SUBLANG_XXX 
#pragma code_page() 
: 
END 
#endif // Language1 resources 
///////////////////////////////////////////////////////////////////////////// 

но, я получаю эти два типа. элементы с четными номерами, как это,

Language1, SUBLANG_XXX 
#pragma code_page() 
: 
END 

и нечетными номерами элементов, как это. // Язык1 ресурсы

Я не могу понять, что я использовал такое же регулярное выражение, но оно возвращается без какой-либо строки. Должен ли я обернуть regex другим форматом? или я делаю неправильно?

+0

Вы пытались проверить, что находится в группах захвата $ 1 и $ 2? – AlfredoVR

+0

Да. я задавался вопросом, почему возвращенный шаблон не содержит некоторых подстрок. –

ответ

1

Это из-за ненужных скобок. Вы получили данные из ваших групп, хранящихся в массиве. Вот рабочий код:

my @LANG = ($rc_file =~ /LANGUAGE LANG_[\s\S]*?#endif.*\n\/{1,}/g); 
+0

thx. я понял –