Regex perl字符串匹配问题
我有一个脚本,我需要跳过评论,我能够实现它的一部分Regex perl字符串匹配问题,regex,perl,Regex,Perl,我有一个脚本,我需要跳过评论,我能够实现它的一部分 IN : {**************************** {test : test...test } Script: if ( $data =~ m/(^{\*+$)/ ){ } 通过以上匹配,我能够识别注释并跳过它以获得下一行 Out: {test : test...test } 如果同一注释在*处包含任何空格或任何字符,则“我的匹配”将失败 IN: {** ***** or {* abccd or {*
IN :
{****************************
{test : test...test }
Script:
if ( $data =~ m/(^{\*+$)/ ){
}
通过以上匹配,我能够识别注释并跳过它以获得下一行
Out:
{test : test...test }
如果同一注释在*处包含任何空格或任何字符,则“我的匹配”将失败
IN:
{** ***** or {* abccd or {*abce
以上所有案例都无法跳过。。。
你的正则表达式中的
$
是一个锚,表示字符串/行的结尾,它坚持只有当你在初始{
之后有一行*
时,匹配才会发生
移除此锚定将允许所有三种情况匹配:
for ( '{*********', '{** *****', ,'{* abccd' , '{*abce' ) {
print "$_ Matches\n" if /^{\*+/;
}
现在还不清楚文本中注释的语法是什么,但是给出了示例,我将假设一行开头的
{*
,后面是直到行末的任何内容,都是注释
在这种情况下,您的正则表达式/(^{\*+$)/
将不起作用。也就是说:
^
-匹配行首{
-匹配{
\*+
-匹配一个或多个*
s$
-匹配行尾*
s和行尾之间出现任何其他内容,则此模式将不匹配
类似于
/^{\*.+$/
的内容应该可以满足您的需要。这会更改您的模式以匹配一个或多个非换行字符(即
),直到您到达行尾。如果您想在{*
部分后面允许一些其他字符,那么只需从模式中删除$
这是一个简单的Perl代码,您可以从以下代码开始:
@data = <main::DATA>;
print map { $_ if !/^{\*+/ } @data;
__DATA__
{****************************
{test : test...test}
测试这段代码。我试图删除锚,但我确实收到了一个错误…说..“在串联(.)或字符串中使用未初始化值”@NEW:行号是否与正则表达式匹配,还是另一行?我尝试使用相同的锚,但确实收到了一个错误…说..“在串联(.)或字符串中使用未初始化值”该警告(不是错误)与您可能使用的特定正则表达式无关。请找出未定义的值并定义它。
{test : test...test}