0

我正在尝试从 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

奇数元素是这样的。// Language1 资源

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

4

1 回答 1

1

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

my @LANG = ($rc_file =~ /LANGUAGE LANG_[\s\S]*?#endif.*\n\/{1,}/g);
于 2013-07-31T09:38:29.587 回答