4

正規表現についてかなり基本的な質問があります。行末までマッチするなどと考えず
に表現を使っています。.*これは機能します。
しかし、なぜかこの表現について考えるようになりました。ウィキペディアをチェックする (私の強調)

.  Matches any single character  
*  Matches the **preceding** element zero or more times  

では、この定義によれば、が文字列の最初の文字を 0 回以上一致させよ.*うとせず、代わりに文字列の文字に一致を適用しようとするのはなぜでしょうか? 私が持っているなら、それを正しく一致させようとする必要がありますか? しかし、それはしません:
abca,aa,aaa etc

 ~
$ perl -e '  
> my $var="abcdefg";  
> $var =~ /(.*)/;   
> print "$1\n";'   
abcdefg   
4

6 に答える 6

2

これ:

.{2,4}

これは本当に省略形です:

(..)|(...)|(....)

同様に、これは:

.*

これは本当に省略形です:

()|(.)|(..)|(...)| // etc.
于 2014-02-08T11:30:26.640 に答える
2

混乱は、 の「要素」という単語から始まりMatches the **preceding** element zero or more timesます。ここでの「先行要素」という用語は、「先行キャプチャ」(または「先行一致」)ではなく、 「先行パターン」を指します。

于 2014-02-08T11:29:54.857 に答える
2

。正規表現にはメモリがありません。「abc」の「a」と一致すると、「b」と一致させようとすると忘れてしまいます。

于 2014-02-08T11:33:35.013 に答える
1

文字ドット.は任意の要素に一致します

これで、文字*は前の要素 (この場合は任意の要素) に 0 回以上一致します。

に:

直前の要素を 0 回以上

要素は.、前の文字が一致しないことを意味します。過去の試合とは関係ありません。ドットを 0 回以上繰り返すだけです。

それは書くこと.?.?と無限の時間のようなものです。

于 2014-02-08T11:29:51.260 に答える