简体   繁体   English

Perl正则表达式匹配很奇怪

[英]Perl regex matching is working weired

I'm trying to extract each language's information from MFC's *.rc file. 我正在尝试从MFC的* .rc文件中提取每种语言的信息。

So, I've found " LANGUAGE LANG_([\\s\\S]*?)#endif(.*)\\n/{1,} " is working for following texts at http://regexpal.com/ 因此,我发现http://regexpal.com/上的LANGUAGE LANG_([\\s\\S]*?)#endif(.*)\\n/{1,} “适用于以下文本

:
LANGUAGE LANG_Language1, SUBLANG_XXX
#pragma code_page()
:
END
#endif    // Language1 resources
/////////////////////////////////////////////////////////////////////////////
:
LANGUAGE LANG_Language2, SUBLANG_XXXX
#pragma code_page()
:
END
#endif    // Language2 resources
/////////////////////////////////////////////////////////////////////////////
:

and also, I've programmed about regex finding through perl like this. 而且,我已经编写了关于像这样通过perl查找正则表达式的程序。

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

and I expected to get every @LANG element forms like following texts. 我希望得到每个@LANG元素形式,例如以下文本。

LANGUAGE LANG_Language1, SUBLANG_XXX
#pragma code_page()
:
END
#endif    // Language1 resources
/////////////////////////////////////////////////////////////////////////////

but, I'm receiving these two types. 但是,我正在接收这两种类型。 even numbered elements are like this, 偶数元素就是这样,

Language1, SUBLANG_XXX
#pragma code_page()
:
END

and odd numbered elements are like this. 奇数元素就是这样。 // Language1 resources // Language1资源

I cannot understand that I've used same regex but It returns without some string. 我不明白我使用了相同的正则表达式,但是返回时没有任何字符串。 Should I wrap regex with another format? 我应该用其他格式包装正则表达式吗? or am I doing wrong? 还是我做错了?

This is because of unnecessary parenthesis. 这是因为不必要的括号。 You got data from your groups stored in the array. 您从存储在阵列中的组中获得数据。 Here is the working code: 这是工作代码:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM