Regex Perl:我犯了什么错误?

Regex Perl:我犯了什么错误?,regex,perl,Regex,Perl,我使用cgi perl能够在浏览器上查看文件内容。我有以下要求: 所有以“服务”一词开头的行必须打印为标题(H4) 所有其他行必须打印为段落(P) 我试过下面的代码,但它不工作。所有行都打印为标题(H4)。我犯了什么错误吗 use strict; use warnings; use diagnostics; printf "Content-type: text/html\n\n"; print <<HTML; <HTML>

我使用cgi perl能够在浏览器上查看文件内容。我有以下要求:

  • 所有以“服务”一词开头的行必须打印为标题(H4)
  • 所有其他行必须打印为段落(P)
我试过下面的代码,但它不工作。所有行都打印为标题(H4)。我犯了什么错误吗

  use strict;
  use warnings;
  use diagnostics;
    printf "Content-type: text/html\n\n";
    print <<HTML;
       <HTML>
       <HEAD>
       <TITLE>DataPower_Status</TITLE>
      </HEAD>
        HTML

     open FILE, "dpstatus" or die "could not open filename";
      while(<FILE>) {
        if ($_^"Service")
   {
        printf "<TR><TD><H4>$_</H4></TD></TR>\n";
  }
   else {

        printf "<TR><TD><p>$_</p></TD></TR>\n";
       }
        }
   close FILE;

    print <<HTML;
   </body>
   </html>
    HTML
使用严格;
使用警告;
使用诊断;
printf“内容类型:text/html\n\n”;
打印以下内容:

根本不使用正则表达式;它只是带有参数
$和
的异或运算符
^
。所以这根本不是你想要的

相反,请将其更改为:

        if ($_ =~ m/^Service/)
或者,更简洁地说,这是:

        if (/^Service/)
这:

根本不使用正则表达式;它只是带有参数
$和
的异或运算符
^
。所以这根本不是你想要的

相反,请将其更改为:

        if ($_ =~ m/^Service/)
或者,更简洁地说,这是:

        if (/^Service/)

二进制“^”返回其逐位异或的操作数

因此,您可能需要正则表达式
/^Service/
,而不是XOR操作

二进制“^”返回其逐位异或的操作数


因此,您可能希望使用regex
/^Service/
而不是XOR操作。

它工作起来绝对正常。您能解释一下我的代码不工作的原因吗?你在代码中到底做了什么?@user2607367:Re:为什么你的代码不起作用:只是它与你试图做的事情无关。如果你能解释为什么你认为你的代码可以工作,我可以试着解决你的误解。Re:my code的作用:
$\u=~ m/^Service/
将正则表达式
^Service
(意思是“以
Service
开头”)应用于
$\uCode>的值。我对perl是新手。因此,我认为使用这段代码
if($\u^“Service”)
可以解决我的问题。但是,我没有正确使用正则表达式。在perl中是否有任何定义/特定的使用正则表达式的方法?是的
m/regexp/
将匹配并重新设置
s/regex/replace/
将像sed一样进行替换。如果要将其应用于特定变量(默认值为$),请使用
=~
。例如,
if($variable=~m/some_text/)
@user2607367:
($uu^“服务”)
类似于
($uu+“服务”)
($u124|“服务”)
:它只是带有两个参数的操作员
^
$和
“服务”
。它没有什么“正则表达式”。(这个
^
操作符是一个位异或)它工作得非常好。你能解释一下为什么我的代码不工作吗?你在代码中到底做了什么?@user2607367:Re:为什么你的代码不起作用:只是它与你试图做的事情无关。如果你能解释为什么你认为你的代码可以工作,我可以试着解决你的误解。Re:my code的作用:
$\u=~ m/^Service/
将正则表达式
^Service
(意思是“以
Service
开头”)应用于
$\uCode>的值。我对perl是新手。因此,我认为使用这段代码
if($\u^“Service”)
可以解决我的问题。但是,我没有正确使用正则表达式。在perl中是否有任何定义/特定的使用正则表达式的方法?是的
m/regexp/
将匹配并重新设置
s/regex/replace/
将像sed一样进行替换。如果要将其应用于特定变量(默认值为$),请使用
=~
。例如,
if($variable=~m/some_text/)
@user2607367:
($uu^“服务”)
类似于
($uu+“服务”)
($u124|“服务”)
:它只是带有两个参数的操作员
^
$和
“服务”
。它没有什么“正则表达式”。(
^
运算符是位异或。)