Perl正则表达式匹配工作很奇怪

时间:2013-07-31 09:27:14

标签: regex perl

我正在尝试从MFC的* .rc文件中提取每种语言的信息。

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

我无法理解我使用了相同的正则表达式,但它返回时没有一些字符串。 我应该用另一种格式包装正则表达式吗?或者我做错了吗?

1 个答案:

答案 0 :(得分:1)

这是因为不必要的括号。您可以从存储在阵列中的组中获取数据。这是工作代码:

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