【问题标题】:Splitting a string to remove surrounding < and > characters拆分字符串以删除周围的 < 和 > 字符
【发布时间】:2010-08-21 11:22:18
【问题描述】:

我有一个像&lt;name&gt;这样的字符串,我想把&lt;&gt;剪掉,只取出name并将它放入一个变量中。

如何使用 perl 的“拆分”功能来做到这一点?

【问题讨论】:

  • 因为您已将语言指定为perl,所以我已将其作为标签添加到您的问题中。将语言作为标签通常是个好主意,因为它可以帮助“语言 x”专家找到您的问题并帮助您回答它 =)
  • 你也可以使用正则表达式:]+),它只会给你名字。
  • 为什么要使用拆分?你不只是想以最好的方式完成任务吗?

标签: perl split


【解决方案1】:

不要使用split。这就像用螺丝刀的错误一端敲钉子一样。我会在某个步骤中进行匹配,您可以在列表上下文中捕获您想要的部分:

 my( $var ) = $input =~ /<(.*?)>/;

或者,您可以使用以下之一删除括号:

 $input =~ tr/<>//;
 $input =~ s/[<>]//g;

【讨论】:

    【解决方案2】:

    您可以在列表上下文中使用正则表达式和匹配:

    my $s = "<name>";
    my ($name) = $s =~ /<(.*)>/;
    

    【讨论】:

    • 这个方法非常有用,效果很好...谢谢哥们..我用了“//”...
    • 你可能想要那个 * 上的非贪婪量词,以防万一。
    • 或使用 /&lt;([^&gt;]*)&gt;/ 明确说明您正在寻找 non-'>' 字符(perl 和代码的未来读者)而不是任何字符(这是. 在正则表达式中的意思)。
    【解决方案3】:

    在回答您关于如何使用 split 进行操作的问题时,您可以这样做:

    $input ="<string>";
    print split(/[<>]/,$input);
    

    Click for live example

    但是更好的方法是

    $input = "<string>";
    print $input =~ /<(.*)>/;
    

    Click for live example

    【讨论】:

      【解决方案4】:

      我不太清楚你为什么要使用 split 来实现这一点......但它是这样的:

      > perl -le'$str="<string>";print split("<",(split(">",$str))[0]);'
      string
      

      【讨论】:

      • 为什么不split( /[&lt;&gt;]/, $str )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多