0

ここにコードがあります

while($l=~/(\\\s*)$/) {
    statements;
}

$lファイルから取得したテキスト行が含まれています。実際、このコードはファイル内の行を通過するためのものです。

質問:

  1. の状態が何をしているのかはっきりとわかりませんwhile。行末にいくつかの空白が続くグループを一致させようとしていると思います。\ループは、行が空白で終わるたびに停止する必要が\あります。よくわかりません。

  2. 私は声明に出くわし$a ~= s/^(.*$)/$1/ました。^string の先頭で一致を強制することを理解していますが(.*$)、 string の末尾にあるすべての文字に一致することを意味します。ステートメントが、末尾の文字グループがテキストの先頭の文字グループと同じかどうかを見つけようとしているということですか?

4

6 に答える 6

0

これは、リテラル バックスラッシュの後に 0 個以上のスペースが続き、その後に行末が続くものと一致します。

于 2013-06-08T14:27:04.740 に答える
0

statementsそのテキスト ファイル内で、行末( ) に\とそれに続く 0 個以上のスペース ( ) を含むすべての行に対して実行されます。\s*$

于 2013-06-08T14:27:32.077 に答える
0

(\\\s*)$ この正規表現は、--- の\後に 0 個以上の数字white space charactersが続き、その後に行末が続くことを意味します。に正規表現があるので、必要に応じ(...)て を使用して一致したものを抽出でき$1ます。

http://rubular.com/r/dtHtEPh5DX

編集 -- 更新に基づく

$a ~= s/^(.$)/$1/--- これはsearch and replace。したがって、正規表現は、改行文字を除いて、正確に1文字を含む行に一致します(. http://www.regular-expressions.info/dot.htmlを使用しているため)。を使用しているため(...)、正規表現に一致した文字が抽出され、変数に格納されますa

編集-正規表現を変更したため、更新された回答がここにあります

$a ~= s/^(.*$)/$1/-- 上記と同じですが、0 個以上の文字に一致するようになりました (改行を除く)

于 2013-06-08T14:28:00.297 に答える
0

末尾の空白文字を無視して、バックスラッシュ文字で終わる行に一致します。

バックスラッシュで行を終了することは、一部の言語およびデータ ファイルで、その行が次の行に続くことを示すために使用されます。したがって、これはこれらの継続行をマージするパーサーの一部であると思われます。

RegExrに正規表現を入力し、ピースの上にマウスを置くと、各ピースの意味がツールチップに表示されます。

于 2013-06-08T14:38:57.517 に答える