gpt4 book ai didi

regex - 如何检测 Perl 中的空行?

转载 作者:行者123 更新时间:2023-12-01 06:54:31 26 4
gpt4 key购买 nike

  • 如何在 Perl 中检查一行($_ 值)是否为空行?或其他
    检查它而不是使用 $_ 的好方法?

    我想这样编码

    if ($_ eq '') # 检查当前行是否为空行(没有任何字符)
    {
    $x = 0;
    }


  • 我用下面的问题解决方案更新了一些代码。

    我的 测试.txt 用于解析:
       constant fixup private GemAlarmFileName = <A "C:\\TMP\\ALARM.LOG">
    vid = 0
    name = ""
    units = ""

    constant fixup private GemConfigAlarms = <U1 0> /* my Comment */
    vid = 1
    name = "CONFIGALARMS"
    units = ""
    min = <U1 0>
    max = <U1 2>
    default = <U1 0>

    我的代码如下。

    这就是为什么我需要最初设置 $x = 0。我不确定它是否正常
    解决与否。
        sub ConstantParseAndPrint
    {
    if (/^$/) // SOLUTION!
    {
    $x = 0;
    }

    if ($x == 0)
    {
    if (/^\s*(constant)\s*(fixup|\/\*fixup\*\/|)\s*(private|)\s*(\w+)\s+=\s+<([a-zA-Z0-9]+)\s+(["']?)([a-zA-Z0-9.:\\]+)\6>\s*(\/\*\s*(.*?)\s*\*\/|)(\r|\n|\s)/)
    {
    $name1 = $1; # Constant
    $name2 = $2; # Fixup
    $name3 = $3; # Private
    $name4 = $4;
    $name5 = $5;
    $name6 = $7;
    $name7 = $8;
    # start print
    if (!$name7 eq '')
    {
    print DEST_XML_FILE "<!-- $name7-->\n";
    }
    print DEST_XML_FILE " <ECID";
    print DEST_XML_FILE " logicalName=\"$name4\"";
    print DEST_XML_FILE " valueType=\"$name5\"";
    print DEST_XML_FILE " value=\"$name6\"";
    $x = 1;
    }
    }
    elsif ($x == 1)
    {
    if(/\s*vid\s*=\s*(.*?)(\s|\n|\r)/)
    {
    $nID = $1;
    print DEST_XML_FILE " vid=\"$nID\"";
    $x = 2;
    }
    }
    elsif ($x == 2)
    {
    if(/\s*name\s*=\s*(.*?)(\s|\n|\r)/)
    {
    $nName = $1;
    print DEST_XML_FILE " name=$nName";
    $x = 3;
    }
    }
    elsif ($x == 3)
    {
    if (/\s*units\s*=\s*(.*?)(\s|\n|\r)/)
    {
    $nUnits = $1;
    print DEST_XML_FILE " units=$nUnits";
    $x = 4;
    }
    }
    elsif ($x == 4)
    {
    # \s+<([a-zA-Z0-9]+)\s+([a-zA-Z0-9]+)>\
    if (/\s*min\s*=\s+<([a-zA-Z0-9]+)\s+([a-zA-Z0-9]+)>(\s|\n|\r)/)
    {
    #$nMinName1 = $1;
    $nMinName2 = $2; # Find the nMin Value
    #$nMinName3 = $3;
    #$nMinName4 = $4;
    print DEST_XML_FILE " min=\"$nMinName2\"";
    $x = 5;
    }
    else
    {
    print DEST_XML_FILE "></ECID>\n";
    $x = 0; # There is no line 4 and line 5
    }
    }
    elsif ($x == 5)
    {
    if (/\s*max\s*=\s+<([a-zA-Z0-9]+)\s+([a-zA-Z0-9]+)>(\s|\n|\r)/)
    {
    #$nMaxName1 = $1;
    $nMaxName2 = $2; # Find the nMax Value
    #$nMaxName3 = $3;
    #$nMaxName4 = $4;
    print DEST_XML_FILE " max=\"$nMaxName2\"";
    $x = 6;
    }
    }
    elsif ($x == 6)
    {
    if (/\s*default\s*=\s+<([a-zA-Z0-9]+)\s+([a-zA-Z0-9]+)>(\s|\n|\r)/)
    {
    #$nDefault1 = $1;
    $nDefault2 = $2; # Find the default Value
    #$nDefault3 = $3;
    #$nDefault4 = $4;
    print DEST_XML_FILE " default=\"$nDefault2\">";
    print DEST_XML_FILE "</ECID>\n";
    $x = 0;
    }
    }
    }

    最佳答案

    if ($_ =~ /^\s*$/) {
    # blank
    }

    检查由行的开头( \s* )/结尾( ^ )约束的 0 个或多个空格( $ )。那是检查空行(即可能有空格)。如果你想要一个空行检查,只需删除 \s* .

    支票对 $_可以是隐式的,所以你可以将上面的内容减少到 if (/^\s*$/)为了简洁。

    关于regex - 如何检测 Perl 中的空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1968702/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com