0

コメントをスキップする必要があるスクリプトがあり、部分的にそれを達成することができます...

IN :

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

Script:

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

上記の一致で、コメントを識別し、それをスキップして次の行を取得することができます。

Out:
{test : test...test }

同じコメントが*の代わりにスペースまたは文字で構成されている場合、私の一致は失敗します。

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

上記のすべてのケースはスキップできません...試合で着用される可能性があるもの...誰かが私を助けることができます..

4

3 に答える 3

1

正規表現の$は、文字列/行の終わりを示すアンカーです。これは*、最初の後に s でいっぱいの行がある場合にのみ一致が発生することを主張します{

このアンカーを削除すると、3 つのケースすべてが一致するようになります。

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

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

テキストのコメントの構文が正確に何であるかは不明ですが、例を考えると、行の先頭に、その後に行の終わりまで続くものがコメントであると仮定します。{*

その場合、正規表現は機能し/(^{\*+$)/ません。それは言います:

  1. ^- 行頭に一致
  2. {- 抹茶{
  3. \*+- 1 つ以上*のに一致
  4. $- 行末に一致

*このパターンは、 s と行末の間に他の何かがある場合、一致しません。

あなた/^{\*.+$/が望むことをするべきです。.これにより、行末に到達するまで、1 つ以上の非改行文字 ( ) に一致するようにパターンが変更されます。

于 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 に答える