0

我有一个脚本,我需要在其中跳过评论,我能够部分实现它......

IN :

{****************************
{test : test...test }

Script:

if ( $data =~  m/(^{\*+$)/ ){
}

通过上述匹配,我能够识别评论并跳过它以获取下一行..

Out:
{test : test...test }

如果相同的评论在 * 的位置包含任何空格或任何字符,我的匹配失败..

IN:
{** *****    or   {* abccd   or {*abce

以上所有案例都没有跳过...比赛中可能会穿什么,...谁能帮帮我..

4

3 回答 3

1

正则表达式中的 是一个锚点,它表示字符串/行的结尾,它坚持只有当你在初始值之后$有一行充满 s 时才会发生匹配*{

删除此锚将允许所有三种情况匹配:

for ( '{*********', '{** *****', ,'{* abccd' , '{*abce' ) {

    print "$_ Matches\n" if /^{\*+/;
}
于 2012-10-04T05:51:19.247 回答
0

目前尚不清楚您的文本中的注释语法究竟是什么,但鉴于示例,我将假设{*一行的开头,然后是直到行尾的任何内容,是一个注释。

在这种情况下,您的正则表达式/(^{\*+$)/将不起作用。说的是:

  1. ^- 匹配行首
  2. {- 匹配一个{
  3. \*+- 匹配一个或*多个
  4. $- 匹配行尾

*如果s 和行尾之间有任何其他内容,则此模式将不匹配。

类似的东西/^{\*.+$/应该做你想做的事。这会更改您的模式以匹配一个或多个非换行符(the .),直到您到达行尾。

于 2012-10-04T05:52:08.800 回答
0

如果您想在{*部分后面允许一些其他字符,那么只需$从模式中删除。

这是一个简单的Perl 代码,您可以从以下代码开始:

@data = <main::DATA>;
print map { $_ if !/^{\*+/ } @data;

__DATA__
{****************************
{test : test...test}

输出

{test : test...test}

在此处测试此代码。

于 2012-10-04T14:52:26.470 回答