在perl中处理多行模式

| 我正在为移动平台添加新的语言支持。我必须在几种文件中为每种语言添加条目,因此我想使用perl做到这一点。要使此过程自动化,我感觉如何匹配多行perl中的模式。 这是我的情况:
const mmi_imeres_mode_details_struct g_ime_mode_array_int[] =
{      
     {
     INPUT_MODE_NONE,
     0,
     0,
     0,
     0,
     0,
     0
     },
    {
     INPUT_MODE_MULTITAP_LOWERCASE_ABC,
     STR_INPUT_METHOD_MENU_MULTITAP_abc,
     WGUI_IME_MULTITAP_LOWERCASE_ABC_IMG,
     INPUT_MODE_DEFAULT_ALTERNATE_METHOD,
     MMI_IME_ALL_EDITORS | MMI_IME_ENGLISH_ONLY_MODE | MMI_IME_ALPHABETIC | MMI_IME_LOWERCASE,
     MMI_IMM_WRITING_LANGUAGE_ENGLISH,
     \"en-US\"
     },
} 首先我有问题,因为在perl文件中一次只能读取一行。所以我首先将文件流转换为单个变量。
my $newstr = \'\';
open (FH, \"$filename\") || die \"Could not open file.\\n\";
while(<FH>)
{
    $newstr = $newstr.$_;

}  
如果是多行模式,没有人能帮助我如何在{}中搜索文本。请尽快回复... :)     
已邀请:
首先,有一个更好的惯用语:
my $newstr;
{
    open my $fh, \'<\', $filename or die \"Could not open file $filename.\\n$!\\n\";
    local $/ = undef;
    $newstr = <$fh>;
}
接下来,您可以在正则表达式上设置/ s修饰符,该修饰符通过允许\'。\'(点)匹配包括换行符在内的任何内容,将字符串视为单行。但是,即使那样也不是必须的,因为无论如何您都不会在正则表达式中使用\'。\'。
while(  
    $newstr =~ m/
        {        # Match the opening bracket.
        ([^}]*)  # Capture any number of characters that exclude \'}\'
        }        # Match the closing bracket.
    /gx          # Use /g for multiple matches, and /x for readability.
) {
    print \"$1\\n\";
}
另一个解决方案是将输入记录分隔符$ /设置为\'} \'。这样一来,您将以大括号结尾的块形式读取文件。漂亮的把戏。     

要回复问题请先登录注册