2013-07-31 33 views
0

我试图从MFC的* .rc文件中提取每种语言的信息。Perl的正则表达式匹配正在工作

所以,我发现“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资源

我不明白我使用了相同的正则表达式,但它返回的时候没有一些字符串。 我应该用另一种格式包装正则表达式吗?还是我做错了?

+0

您是否尝试检查$ 1和$ 2捕获组中的内容? – AlfredoVR

+0

是的。我想知道为什么返回的模式不包括一些子字符串。 –

回答

1

这是因为不必要的括号。您从您的组中存储了数据中存储的数据。以下是工作代码:

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

thx。我明白了 –