0

perl (実際には PDL) プログラムで次のステートメントを見つけました。

/\/([\w]+)$/i;

perlプログラミングの見習いである私のために、誰かがこれを解読できますか?

4

6 に答える 6

10

確かに、私はそれを裏返しに説明します:

\w-単語で使用できる単一の文字に一致します(英数字と「_」)

[...]-角かっこ内の1文字に一致します

[\w]-単語で使用できる単一の文字に一致します(ここでは冗長です)

+-前の文字と一致し、可能な限り繰り返しますが、少なくとも1回は出現する必要があります。

[\w]+ -単語文字のグループに何度も一致します。これで単語が見つかります。

(...)-グループ化。後で使用するために、この文字のセットを覚えておいてください。

([\w]+)-単語に一致し、後で使用するために覚えておいてください

$-行末。行末の何かに一致する

([\w]+)$-行の最後の単語と一致し、後で使用するために覚えておいてください

\/-単一のスラッシュ文字'/'。スラッシュは特殊なので、バックスラッシュでエスケープする必要があります。

\/([\w]+)$-スラッシュ「/」の後の行の最後の単語と一致し、後で使用するためにその単語を覚えておいてください。これはおそらく、パスからディレクトリ/ファイル名を取得しています。

/.../-構文に一致

/.../i--iは大文字と小文字を区別しないことを意味します。

すべて一緒に今:

/\/([\w]+)$/i;-行の最後の単語と一致し、後で使用できるように覚えておきます。単語はスラッシュの後に来る必要があります。基本的に、絶対パスからファイル名を取得します。大文字と小文字を区別しない部分は関係ありません\w。すでに両方の大文字と小文字が一致します。

Perl正規表現の詳細については、こちらをご覧ください:http: //www.troubleshooters.com/codecorn/littperl/perlreg.htm

そして、JRFergusonが指摘したように、YAPE :: Regex :: Explainは、正規表現をトークン化し、その部分を説明するのに役立ちます。

于 2012-09-10T18:25:54.303 に答える
2
/\/([\w]+)$/i;

これは正規表現であり、完全なステートメントの場合は$_、次のように変数に適用されます。

$_ =~ /\/([\w]+)$/i;

スラッシュ\/、英数字の文字列\w+、行末を検索します$()また、最終的に変数に含まれる英数字の文字列もキャプチャします$1。最後に、/i大文字と小文字を区別しないようにしますが、この場合は効果がありません。

于 2012-09-10T18:17:10.907 に答える
2

正規表現を「説明」するのには役立ちませんが、テスト ケースがあれば、ダミアンの新しいRegexp::Debuggerユーティリティは、マッチング中に実際に何が起こるかを監視するための優れたユーティリティです。それをインストールrxrxし、コマンド ラインで実行してデバッガーを起動し、/\/([\w]+)$/and '/r'(たとえば) を入力して、最後mにマッチングを開始します。その後、Enter キーを繰り返し押すことで、デバッガーをステップ実行できます。すごくかっこいい!

于 2012-09-11T03:14:59.553 に答える
0

Online Regex Analyzerは言及に値します。これは、正規表現の意味を説明するリンクであり、記録のためにここに貼り付けられています。

順序: 次のすべてに順番に一致

/                                                  (slash)
                                               --+
Repeat                                           | (in GroupNumber:1)
   AnyCharIn[ WordCharacter] one or more times   |
                                               --+
EndOfLine
于 2012-09-11T00:24:09.160 に答える
0

これは$_、スラッシュの後に 1 つ以上の文字 (大文字と小文字を区別しない) が続き、それを$1

$_ value     then     $1 value 
------------------------------
"/abcdes"     |       "abcdes"
"foo/bar2"    |       "bar2"
"foobar"      |       undef      # no slash so doesn't match
于 2012-09-10T18:22:09.170 に答える