4

外部ソースから大量のテキストを取得し、それを変数に保存してから、その変数を HTML のより大きなブロックの一部として表示しています。そのまま表示する必要があり、ドル記号が問題になっています。

セットアップは次のとおりです。

# get the incoming text
my $inputText = "This is a $-, as in $100. It is not a 0.";

print <<"OUTPUT";
before-regex: $inputText
OUTPUT

# this regex seems to have no effect
$inputText =~ s/\$/\$/g;

print <<"OUTPUT";
after-regex:  $inputText
OUTPUT

実際には、これらのprintブロックは、変数が直接挿入された、はるかに大きな HTML のチャンクです。

s/\$/\$/g最初は正規表現をエスケープ\$して を検索し$、2 番目\$は挿入され、後で Perl をエスケープして$. しかし、私はそれを機能させることができません。

ここに私が得ているものがあります:

before-regex: This is a 0, as in . It is not a 0.
after-regex:  This is a 0, as in . It is not a 0.

そして、ここに私が見たいものがあります:

before-regex: This is a 0, as in . It is not a 0.
after-regex:  This is a $-, as in $100. It is not a 0.

グーグルは私にこの質問をもたらします。回答で配列と for ループを使用しようとすると、効果がありません。

変数をそのまま正確に表示するブロック出力を取得するにはどうすればよいですか?

4

3 に答える 3

7

二重引用符で文字列を作成すると、変数の置換がすぐに行われます。その場合、文字列にその$文字が含まれることはありません。を文字列に表示したい場合は$、一重引用符を使用するか、エスケープしてください。そうすると、変数置換が得られないことに注意してください。

あなたの正規表現に関しては、それは奇妙です。それらを探して$に置き換えてい$ます。バックスラッシュが必要な場合は、それらもエスケープする必要があります。

于 2012-11-07T22:14:50.283 に答える
4

そして、ここに私が見たいものがあります:

before-regex: This is a 0, as in . It is not a 0.
after-regex:  This is a $-, as in $100. It is not a 0.

うーん、まあ、一般的なケースが何であるかはわかりませんが、おそらく次のようになります。

s/0/\$-/;
s/in \K/\$100/;

それとも始めるつもりだったの?

 my $inputText = "This is a \$-, as in \$100. It is not a 0.";
 # Produces the string: This is a $-, as in $100. It is not a 0.

また

 my $inputText = 'This is a $-, as in $100. It is not a 0.';
 # Produces the string: This is a $-, as in $100. It is not a 0.
于 2012-11-07T22:13:09.180 に答える
2

あなたの間違いは、変数の宣言で一重引用符の代わりに二重引用符を使用していることです。

これは次のようになります。

# get the incoming text
my $inputText = 'This is a $-, as in $100. It is not a 0.';

' と " と ` の違いを学んでください。http: //mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/wordsを参照してください。

これはシェル用ですが、Perl でも同じです。

于 2012-11-07T22:14:58.817 に答える