Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在perl中处理多行模式_Regex_Perl - Fatal编程技术网

Regex 在perl中处理多行模式

Regex 在perl中处理多行模式,regex,perl,Regex,Perl,我正在为我的移动平台添加新的语言支持。我必须在几个文件中为每种语言添加条目,所以我想用perl来完成。为了自动化这个过程,我感到如何在perl中匹配多行模式存在问题。 以下是我的设想: const mmi_imeres_mode_details_struct g_ime_mode_array_int[] = { { INPUT_MODE_NONE, 0, 0, 0, 0, 0, 0 },

我正在为我的移动平台添加新的语言支持。我必须在几个文件中为每种语言添加条目,所以我想用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='';
打开(FH,“$filename”)| | die“无法打开文件。\n”;
while()
{
$newstr=$newstr.$\;
}  

没有人能帮助我如何在{}中搜索文本,如果它是多行模式。请尽快回复…)

首先,有一个更好的习惯用法来搜索文件:

my $newstr;
{
    open my $fh, '<', $filename or die "Could not open file $filename.\n$!\n";
    local $/ = undef;
    $newstr = <$fh>;
}

另一个解决方案是将输入记录分隔符$/设置为“}”。这样,您就可以将文件作为以右括号结尾的块来读取。妙计。

首先,有一个更好的习惯用法来描述文件的声音:

my $newstr;
{
    open my $fh, '<', $filename or die "Could not open file $filename.\n$!\n";
    local $/ = undef;
    $newstr = <$fh>;
}

另一个解决方案是将输入记录分隔符$/设置为“}”。这样,您就可以将文件作为以右括号结尾的块来读取。妙计。

你知道,我对我以前的答案不是很满意。虽然在技术上是正确的,但它并不考虑手头更大的任务。您正在分析嵌套标记。为此,使用解析模块;不要尝试使用自己的regexp解决方案。它变得非常复杂。相反,使用Parse::RecDescent,或Parse::RecDescent::Simple以获得更好的准确性、更少的头痛和更好的夜间睡眠。是的,你是对的,从长远来看,它没有好处,但cpan的使用范围非常广。但我会尝试…thnx作为你的建议…非常有用…:)也看看。你知道,我对我之前的答案不是很满意。虽然在技术上是正确的,但它并不考虑手头更大的任务。您正在分析嵌套标记。为此,使用解析模块;不要尝试使用自己的regexp解决方案。它变得非常复杂。相反,使用Parse::RecDescent,或Parse::RecDescent::Simple可以提高准确性,减少头痛,改善夜间睡眠。是的,你是对的,从长远来看,这是没有好处的,但cpan的使用范围非常广。但我会尝试..thnx作为你的建议..真的很有帮助…:)也看看。